将数据框中的列拆分为R中的列表

时间:2018-04-02 20:28:34

标签: r

我希望将数据框中预定义数量的列(包括所有行)转换为列表中的项目(即列表中的第一项将是包含第1-3列的数据框原始的df,第二项将包括第4-6列,第三项将包括第7-9列等。)。

是否有实现这一目标的功能?

由于

3 个答案:

答案 0 :(得分:2)

你可以遍历3,6,..直到你的向量的长度,并选择1:3,4:6,...列lapply。类似于循环,但更快,更紧凑,并为您提供所需的输出。

lapply(3*(1:(ncol(df)%/%3)),function(x) df[,(x-2):x])

答案 1 :(得分:2)

lapply[一起使用即可获得所需内容:

df <- head(mtcars)[1:9]               # create a 9 column df
subdiv <- split(1:9,rep(1:3,each=3))  # splitting by 3, but you can put any subdivision in a list

lapply(subdiv,function(x,y) y[x],df)
# $`1`
# mpg cyl disp
# Mazda RX4         21.0   6  160
# Mazda RX4 Wag     21.0   6  160
# Datsun 710        22.8   4  108
# Hornet 4 Drive    21.4   6  258
# Hornet Sportabout 18.7   8  360
# Valiant           18.1   6  225
# 
# $`2`
# hp drat    wt
# Mazda RX4         110 3.90 2.620
# Mazda RX4 Wag     110 3.90 2.875
# Datsun 710         93 3.85 2.320
# Hornet 4 Drive    110 3.08 3.215
# Hornet Sportabout 175 3.15 3.440
# Valiant           105 2.76 3.460
# 
# $`3`
# qsec vs am
# Mazda RX4         16.46  0  1
# Mazda RX4 Wag     17.02  0  1
# Datsun 710        18.61  1  1
# Hornet 4 Drive    19.44  1  0
# Hornet Sportabout 17.02  0  0
# Valiant           20.22  1  0

答案 2 :(得分:0)

我不确定这是否能完全回答您的问题,但如果您只是尝试根据数字1:n选择数据框中的列。以下将有效。

List1 = dataframe[,1:3]
List2 = dataframe[,4:6]
List3 = dataframe[,7:9]

这将从每个所需的列创建三个新的数据帧。