R:按列拆分数据框

时间:2016-03-12 07:21:00

标签: r split dataframe subset

我有一个具有此结构的数据框

x = data.frame(let = letters, LET = LETTERS, num1 = 1:26, num2 = 21:46, num3 = 71:96, num4 = 68:93 )

我想将其拆分为3列dataframe的列表。前两列 LET 仍然很常见,第三列有所不同。第一个数据帧是(let,LET,num1),第二个数据帧是(let,LET,num2),依此类推。

我目前的策略是将数据帧转换为长格式,并使用plyr和dplyr包基于 num 对其进行拆分。有没有更简单的方法来完成这项任务。

2 个答案:

答案 0 :(得分:2)

您可以像这样使用lapply

lapply(1:4, function(D) x[ ,c("let", "LET", paste0("num", D))])

如果您不知道可以使用的num*列的列名

nonLetNames <- names(x)[!(names(x) %in% c("let", "LET"))]
lapply(nonLetNames, function(nom) x[ ,c("let", "LET", nom)])

答案 1 :(得分:1)

以下是基于Map的方法

Map(function(x,y,z) setNames(cbind(x,y), c(names(x), z)), 
            list(x[1:2]), x[-(1:2)], names(x)[-(1:2)])