如何从以第一列为参考的数据框中列出列表?

时间:2019-04-26 03:57:09

标签: r list dataframe

我仍在学习R。我想知道如何使用第一列作为参考来创建列列表。以mtcars为例:

head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

我想拥有

$cyl
                   mpg cyl 
Mazda RX4         21.0   6  
Mazda RX4 Wag     21.0   6  
Datsun 710        22.8   4  
Hornet 4 Drive    21.4   6  
Hornet Sportabout 18.7   8  
Valiant           18.1   6  

$disp
                   mpg disp 
Mazda RX4         21.0  160 
Mazda RX4 Wag     21.0  160 
Datsun 710        22.8  108 
Hornet 4 Drive    21.4  258 
Hornet Sportabout 18.7  360 
Valiant           18.1  225 
...

谢谢!

1 个答案:

答案 0 :(得分:2)

我们可以将lapplycbind第1列与mtcars中的所有其他列一起使用

lapply(mtcars[-1], function(x) cbind(mtcars[1], x))

#$cyl
#                     mpg x
#Mazda RX4           21.0 6
#Mazda RX4 Wag       21.0 6
#Datsun 710          22.8 4
#Hornet 4 Drive      21.4 6
#Hornet Sportabout   18.7 8
#Valiant             18.1 6 
#....

#$disp
#                     mpg     x
#Mazda RX4           21.0 160.0
#Mazda RX4 Wag       21.0 160.0
#Datsun 710          22.8 108.0
#Hornet 4 Drive      21.4 258.0
#Hornet Sportabout   18.7 360.0
#....

这类似于purrr::map

purrr::map(mtcars[-1], ~cbind(mtcars[1], .))

或使用Map

Map(cbind, x = mtcars[1], y = mtcars[-1])

这类似于purrr::map2

purrr::map2(mtcars[1], mtcars[-1], cbind)