我有一个包含两列的数据框:“From”和“To”
From To
a b
b c
c d
e f
我想检查下一行的“From”是否与当前行中的“To”相同。如果是这样,那么当前行中的“To”可以用下一个“To”代替。此外,可以删除下一行。
这必须继续/循环,直到没有行的“To”与下一行的“From”相同。
最终结果如下:
From To
a d
e f
我被困在这里......无法弄清楚如何传递/删除行以达到最终结果......
答案 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元素进行比较。