R:将多个列合并为同一行中的一对列单元 [英] R: Combine multiple columns as pairs of column cells in same row
本文介绍了R:将多个列合并为同一行中的一对列单元的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望将数据框中的多列组合/配对为同一行中的列单元对。例如,df1
应转换为df2
。
df1
col1 col2 col3
1 2 3
0 0 1
df2
c1 c2
1 2
1 3
2 3
0 0
0 1
0 1
该解决方案应可针对df1
%s(方式)超过三列进行扩展。
我想过熔化/重塑/dcast,但还没有找到解决方案。数据帧中没有NAS。谢谢!
编辑:Reshape
刚刚生成错误,所以我考虑
combn(df1[1,], 2)
comb2 <- t(comb1)
和遍历所有行进行循环和追加。这样效率很低,需要处理200万行。
推荐答案
您的编辑与我下面的答案非常相似,您只需在df1的各行上重新绑定每次迭代的结果。see this answer for more使用data.table是加快rind速度的一种好方法。
编辑:不幸的是,当我切换到data.table方法时,结果发现rbindlist()导致答案错误(如下面的注释所指出的)。因此,尽管它可能会稍微慢一些,但我认为预分配数据帧并使用RBIND可能是最好的选择。
EDIT2:将预分配的df切换为更通用的行数。
df1 = as.data.frame(matrix(c(1,2,3,4,0,0,1,1), byrow = TRUE, nrow = 2))
nrow_combn = nrow(t(combn(df1[1,], m = 2)))
nrow_df = nrow(df1) * nrow_combn
df2 = data.frame(V1 = rep(0, nrow_df), V2 = rep(0, nrow_df))
for(i in 1:nrow(df1)){
df2[(((i-1)*nrow_combn)+1):(i*(nrow_combn)), ] = data.frame(t(combn(df1[i,], m = 2)))
}
这篇关于R:将多个列合并为同一行中的一对列单元的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文