Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:按列拆分数据帧_R_Split_Dataframe_Subset - Fatal编程技术网

R:按列拆分数据帧

R:按列拆分数据帧,r,split,dataframe,subset,R,Split,Dataframe,Subset,我有一个具有这种结构的数据帧 x = data.frame(let = letters, LET = LETTERS, num1 = 1:26, num2 = 21:46, num3 = 71:96, num4 = 68:93 ) 我想将其拆分为3列数据帧列表。前两列let和let仍然通用,第三列有所不同。第一个数据帧是(let,let,num1),第二个是(let,let,num2),依此类推 我目前的策略是使用plyr和dplyr包将数据帧转换为长格式,并基于num对其进行拆分。有没有更简

我有一个具有这种结构的数据帧

x = data.frame(let = letters, LET = LETTERS, num1 = 1:26, num2 = 21:46, num3 = 71:96, num4 = 68:93 )
我想将其拆分为3列数据帧列表。前两列let和let仍然通用,第三列有所不同。第一个数据帧是(let,let,num1),第二个是(let,let,num2),依此类推


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

您可以使用
lappy
作为示例

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)])

nonLetNames这是一种基于
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)])