根据列值合并行,并在下一行中为不同的列值

时间:2016-08-30 15:33:13

标签: r dataframe

我有一个包含两列的数据框:“From”和“To”

From  To
a     b
b     c
c     d
e     f

我想检查下一行的“From”是否与当前行中的“To”相同。如果是这样,那么当前行中的“To”可以用下一个“To”代替。此外,可以删除下一行。

这必须继续/循环,直到没有行的“To”与下一行的“From”相同。

最终结果如下:

From  To
a     d
e     f

我被困在这里......无法弄清楚如何传递/删除行以达到最终结果......

2 个答案:

答案 0 :(得分:1)

我认为这应该有用,

按行(c(t(df)))将数据框拆分为单独的元素。使用rle查找具有2个连续值并删除它们的元素(x$lengths != 2)。使用ncol = 2将剩余的元素再次转换为数据框,我们知道这里只有两列。

x <- rle(c(t(df)))
setNames(data.frame(matrix(x$values[x$lengths != 2],ncol = 2,byrow = T)), c("From", "To"))

#  From To
#1    a  d
#2    e  f

如果您发现了一些不起作用的情况,请告诉我。

答案 1 :(得分:1)

此代码适用于您的示例。

MonadReader

它的工作原理是偏移From和To向量的顺序,包括第一个From元素和最后一个To元素,并将后续From元素与前面的To元素进行比较。

相关问题