R中数据帧列的组合

时间:2018-01-23 16:46:47

标签: r dataframe combinations

我的数据框如下所示:

df <-
Date  P1 P2 P3 P4
1/31  5  3  4  5 
2/28  2  3  7  8 
3/31  5  6  7  8 

我想按日期对列P1 ... P4进行所有组合,一次取2 - 4C2。结果将是一个包含结果数据框的列表,理想情况下如下所示:

[[1]]
Date  P1 P2
1/31  5  3  
2/28  2  3  
3/31  5  6 

[[2]]
Date  P1 P3 
1/31  5  4   
2/28  2  7   
3/31  5  7  

.
.
.  

我正在尝试使用combn()函数来解决这个问题。我可以通过

完成组合
combn(names(df),2,simplify=FALSE) 

但是这给了我日期和结果中的值。我应该怎么做这个任务?

2 个答案:

答案 0 :(得分:1)

试试这个

ind <- which(names(df)=="Date") # find the index of Date column
combn(ncol(df)-1, 2, function(a) cbind(df[ind], df[-ind][a]), simplify = F)

答案 1 :(得分:1)

使用lapply你可以做

split_vec = combn(names(df)[-1], 2)

lapply(1:ncol(split_vec), function(x) select(df, "Date", split_vec[, x]))