[英]R reduce/combine columns in a data.frame
我正在使用一个数据框,如果两个单元格具有相同的值,我想将两列合并为一个。
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24
1 20 30 40 54 64 74 88 98 108 122 132 142 168 178 188 202 212 222 236 246 256 270 280 290
5 2 4 6 2 4 6 2 4 6 2 4 6 2 4 6 2 4 6 2 4 6 2 4 6
6 6 6 6 13 13 13 20 20 20 27 27 27 6 6 6 13 13 13 20 20 20 27 27 27
那就是我拥有的数据集。 如果要合并第1行中的所有内容,则想合并第5,6行中的元素相同的两列,例如,上面的数据集将变为
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
1 (20,168) (30,178) (40,188) (54,202) (64,212) (74,222) (88,236) (98,246) (108,256) (122,270) (132,280) (142,290)
5 2 4 6 2 4 6 2 4 6 2 4 6
6 6 6 6 13 13 13 20 20 20 27 27 27
在此先感谢编辑:将行更改为列
我们可以通过paste
第二行和第三行来创建分组变量(gr)。 然后,我们用'gr' split
列的顺序以获取list
输出。 根据列索引对'df1'的第一行进行分组, paste
元素( toString
是paste(., collapse=', ')
的便捷包装器,并添加带有括号的其他格式,我们可以使用paste
或sprintf
), unsplit
并将输出分配给'df1'的第一行
gr <- paste(df1[2,], df1[3,])
lst <- split(seq_along(df1), gr)
df1[1,] <- unsplit(lapply(lst, function(x)
sprintf('(%s)', toString(df1[1,x]))) , gr)
df1
# X1 X2 X3 X4 X5 X6 X7
#1 (20, 168) (30, 178) (40, 188) (54, 202) (64, 212) (74, 222) (88, 236)
#5 2 4 6 2 4 6 2
#6 6 6 6 13 13 13 20
# X8 X9 X10 X11 X12 X13 X14
#1 (98, 246) (108, 256) (122, 270) (132, 280) (142, 290) (20, 168) (30, 178)
#5 4 6 2 4 6 2 4
#6 20 20 27 27 27 6 6
# X15 X16 X17 X18 X19 X20 X21
#1 (40, 188) (54, 202) (64, 212) (74, 222) (88, 236) (98, 246) (108, 256)
#5 6 2 4 6 2 4 6
#6 6 13 13 13 20 20 20
# X22 X23 X24
#1 (122, 270) (132, 280) (142, 290)
#5 2 4 6
#6 27 27 27
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.