我想知道如何合并数据框中的重复行,然后将重复的值合并到另一列中。
以下是现有数据框架和可接受作为解决方案的两个数据框架的示例
df1 <- data.frame(col1 = c("test1", "test2", "test2", "test3"), col2 = c(1, 2, 3, 4))
df.ideal <- data.frame(col1 = c("test1", "test2", "test3"), col2 = c(1, "2, 3", 4))
df.ideal2 <- data.frame(col1 = c("test1", "test2", "test3"),
col2 = c(1, 2, 4),
col3 = c(NA, 3, NA))
在第一个理想数据框中,折叠重复的行,并添加两个数字列。我已经查看了有关堆栈溢出的其他类似问题,但它们都处理了组合行。我需要删除重复的行,因为我有另一个数据集,我需要合并它需要一定数量的行。所以,我想保留所有的价值观。谢谢你的帮助!
答案 0 :(得分:6)
要从df1
转到df.ideal
,您可以使用aggregate()。
aggregate(col2~col1, df1, paste, collapse=",")
# col1 col2
# 1 test1 1
# 2 test2 2,3
# 3 test3 4
如果你想进入df.ideal2
,那么从长期到广泛的过程中,这更像是一次重塑。你可以做到
reshape(transform(df1, time=ave(col2, col1, FUN=seq_along)), idvar="col1", direction="wide")
# col1 col2.1 col2.2
# 1 test1 1 NA
# 2 test2 2 3
# 4 test3 4 NA
仅使用基础reshape()
函数。
答案 1 :(得分:2)
另一种选择是使用splitstackshape
library(data.table)
library(splitstackshape)
DT1 <- setDT(df1)[,list(col2=toString(col2)) ,col1]
DT1
# col1 col2
#1: test1 1
#2: test2 2, 3
#3: test3 4
您可split
col2
DT1
获取df.ideal2
或
cSplit(DT1, 'col2', sep=',')
# col1 col2_1 col2_2
#1: test1 1 NA
#2: test2 2 3
#3: test3 4 NA
或来自df1
dcast.data.table(getanID(df1, 'col1'), col1~.id, value.var='col2')
# col1 1 2
#1: test1 1 NA
#2: test2 2 3
#3: test3 4 NA