如何將 R 資料框中的行轉換為列表?
有時需要對每一行進行不同的處理,因此,可能需要將這些行轉換為列表。這將幫助我們對每一行元素進行單獨的操作。如要將行轉換為列表,我們可以使用 split 函式透過定義資料框中的行數。
考慮以下資料框 -
示例
set.seed(101) x1<-rnorm(20,5,1) x2<-rnorm(20,5,2) x3<-rnorm(20,5,1.5) x4<-rnorm(20,3,0.096) df1<-data.frame(x1,x2,x3,x4) df1
輸出
x1 x2 x3 x4 1 4.673964 4.672489 5.723688 2.975059 2 5.552462 6.417044 6.137321 2.864527 3 4.325056 4.464039 1.521009 2.938430 4 5.214359 2.072156 4.310743 3.010796 5 5.310769 6.488872 3.341924 3.040570 6 6.173966 2.179220 5.604392 3.037136 7 5.618790 5.934135 5.853402 2.933971 8 4.887266 4.761360 3.940875 3.014295 9 5.917028 5.934478 4.564864 2.994466 10 4.776741 5.996271 2.774183 2.992817 11 5.526448 6.789874 3.274617 3.144950 12 4.205156 5.558304 4.588293 3.155514 13 6.427756 7.015732 5.866852 3.110703 14 3.533180 0.853787 2.904646 2.992550 15 4.763317 7.379707 6.123587 2.825382 16 4.806662 3.551252 3.423220 2.900405 17 4.150245 5.335968 5.248071 3.029039 18 5.058465 6.840670 6.694714 2.877317 19 4.182330 1.656790 6.760584 3.013281 20 2.949692 5.896938 4.358205 2.995106
將 df1 的行轉換為列表 -
df1_row_list<-split(df1,1:nrow(df1))
df1_row_list
$`1`
x1 x2 x3 x4 1 4.673964 4.672489 5.723688 2.975059
$`2`
x1 x2 x3 x4 2 5.552462 6.417044 6.137321 2.864527
$`3`
x1 x2 x3 x4 3 4.325056 4.464039 1.521009 2.93843
$`4`
x1 x2 x3 x4 4 5.214359 2.072156 4.310743 3.010796
$`5`
x1 x2 x3 x4 5 5.310769 6.488872 3.341924 3.04057
$`6`
x1 x2 x3 x4 6 6.173966 2.17922 5.604392 3.037136
$`7`
x1 x2 x3 x4 7 5.61879 5.934135 5.853402 2.933971
$`8`
x1 x2 x3 x4 8 4.887266 4.76136 3.940875 3.014295
$`9`
x1 x2 x3 x4 9 5.917028 5.934478 4.564864 2.994466
$`10`
x1 x2 x3 x4 10 4.776741 5.996271 2.774183 2.992817
$`11`
x1 x2 x3 x4 11 5.526448 6.789874 3.274617 3.14495
$`12`
x1 x2 x3 x4 12 4.205156 5.558304 4.588293 3.155514
$`13`
x1 x2 x3 x4 13 6.427756 7.015732 5.866852 3.110703
$`14`
x1 x2 x3 x4 14 3.53318 0.853787 2.904646 2.99255
$`15`
x1 x2 x3 x4 15 4.763317 7.379707 6.123587 2.825382
$`16`
x1 x2 x3 x4 16 4.806662 3.551252 3.42322 2.900405
$`17`
x1 x2 x3 x4 17 4.150245 5.335968 5.248071 3.029039
$`18`
x1 x2 x3 x4 18 5.058465 6.84067 6.694714 2.877317
$`19`
x1 x2 x3 x4 19 4.18233 1.65679 6.760584 3.013281
$`20`
x1 x2 x3 x4 20 2.949692 5.896938 4.358205 2.995106
is.list(df1_row_list) [1] TRUE
我們來看另一個示例 -
示例
y1<-LETTERS[1:20] y2<-1:20 y3<-sample(0:9,20,replace=TRUE) y4<-rpois(20,3) y5<-rexp(20,3) df2<-data.frame(y1,y2,y3,y4,y5) df2
輸出
y1 y2 y3 y4 y5 1 A 1 6 1 0.12535201 2 B 2 1 4 0.04849127 3 C 3 7 4 0.10894953 4 D 4 0 4 0.32620261 5 E 5 3 7 0.04711375 6 F 6 5 2 0.10263975 7 G 7 3 1 0.35080088 8 H 8 2 4 0.25617221 9 I 9 0 0 0.31124956 10 J 10 0 5 0.07771391 11 K 11 7 2 0.02583599 12 L 12 2 2 0.06699178 13 M 13 3 3 0.04767600 14 N 14 1 4 0.11942077 15 O 15 6 4 0.62873345 16 P 16 3 6 0.08066371 17 Q 17 3 3 0.58563662 18 R 18 9 0 0.00548393 19 S 19 0 2 0.01171107 20 T 20 0 1 0.10728116
將 df2 的行轉換為列表 -
df2_row_list<-split(df2,1:nrow(df2))
df2_row_list
$`1`
y1 y2 y3 y4 y5 1 A 1 4 2 0.02331396
$`2`
y1 y2 y3 y4 y5 2 B 2 6 2 0.2343971
$`3`
y1 y2 y3 y4 y5 3 C 3 1 5 0.022928
$`4`
y1 y2 y3 y4 y5 4 D 4 3 2 0.009332871
$`5`
y1 y2 y3 y4 y5 5 E 5 3 4 0.3321631
$`6`
y1 y2 y3 y4 y5 6 F 6 8 5 0.6256276
$`7`
y1 y2 y3 y4 y5 7 G 7 8 2 0.03358184
$`8`
y1 y2 y3 y4 y5 8 H 8 2 3 0.2089223
$`9`
y1 y2 y3 y4 y5 9 I 9 6 3 0.5231238
$`10`
y1 y2 y3 y4 y5 10 J 10 7 3 0.01456478
$`11`
y1 y2 y3 y4 y5 11 K 11 2 2 0.670605
$`12`
y1 y2 y3 y4 y5 12 L 12 1 2 0.1021066
$`13`
y1 y2 y3 y4 y5 13 M 13 5 7 0.2673457
$`14`
y1 y2 y3 y4 y5 14 N 14 0 1 0.442615
$`15`
y1 y2 y3 y4 y5 15 O 15 3 5 0.2244831
$`16`
y1 y2 y3 y4 y5 16 P 16 7 2 0.2897614
$`17`
y1 y2 y3 y4 y5 17 Q 17 2 4 0.4671283
$`18`
y1 y2 y3 y4 y5 18 R 18 7 3 0.274696
$`19`
y1 y2 y3 y4 y5 19 S 19 0 2 0.1120801
$`20`
y1 y2 y3 y4 y5 20 T 20 8 5 0.2727685
is.list(df2_row_list) [1] TRUE
廣告