我希望将数据框中预定义数量的列(包括所有行)转换为列表中的项目(即列表中的第一项将是包含第1-3列的数据框原始的df,第二项将包括第4-6列,第三项将包括第7-9列等。)。
是否有实现这一目标的功能?
由于
答案 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]
这将从每个所需的列创建三个新的数据帧。