R:将多个列合并为同一行中的一对列单元 [英] R: Combine multiple columns as pairs of column cells in same row

查看:18
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆