使用R或python,我有一个数据集,我想知道如何合并具有重复项的连续行。
示例
猫... Q
狗... U
猫... T
狗... P
猫* ...是
猫* ... K
狗... P
第X列有一些条目,我想连续两次将具有条目“ cat”的任何行合并(我用“ *”突出显示了它们),因此它们将与条目变成一行Y列中的为(Y,K)。
猫... Q
狗... U
猫... T
狗... P
cat ... Y,K
狗... T
如果条件是连续的,则在一种情况下几乎将具有重复条目的任何行合并。
答案 0 :(得分:1)
这里是base R
的{{1}}方法。通过比较相邻元素“ X”的相等性来创建分组列,并使用aggregate
中的元素将by和aggregate
元素分组在一起。
paste
aggregate(Y ~ X + grp, transform(dat,
grp = cumsum(c(TRUE, X[-1] != X[-length(X)]))),
FUN = paste, collapse= ",")[c('X', 'Y')]
# X Y
#1 cat Q
#2 dog U
#3 cat T
#4 dog P
#5 cat Y,K
#6 dog P
或使用dat <- structure(list(X = c("cat", "dog", "cat", "dog", "cat", "cat",
"dog"), Y = c("Q", "U", "T", "P", "Y", "K", "P")),
class = "data.frame", row.names = c(NA, -7L))
python
dat['grp'] = (dat.X != dat.X.shift()).cumsum()
out = dat.groupby(['grp', 'X'])['Y'].apply(lambda x: \
",".join(x)).reset_index()[['X', 'Y']]
print(out)
# X Y
#0 cat Q
#1 dog U
#2 cat T
#3 dog P
#4 cat Y,K
#5 dog P