R 基于列值和下一行中不同列的值合并行

R 基于列值和下一行中不同列的值合并行,r,dataframe,R,Dataframe,我有一个数据框,有两列:“From”和“To” 我想检查下一行的“From”是否与当前行的“to”相同。如果是,则可以用下一个“To”替换当前行中的“To”。此外,还可以删除下一行 这必须继续/循环,直到没有行的“to”与下一行的“From”相同 最终结果如下所示: From To a d e f 我被困在这里。。。无法确定如何传递/删除行以实现endresult…我认为这应该可行 按行(c(t(df))将数据帧分解为单独的元素。使用rle查找具有两个连续值的元素并删除它们(

我有一个数据框,有两列:“From”和“To”

我想检查下一行的“From”是否与当前行的“to”相同。如果是,则可以用下一个“To”替换当前行中的“To”。此外,还可以删除下一行

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

最终结果如下所示:

From  To
a     d
e     f

我被困在这里。。。无法确定如何传递/删除行以实现endresult…

我认为这应该可行

按行(
c(t(df))
将数据帧分解为单独的元素。使用
rle
查找具有两个连续值的元素并删除它们(
x$length!=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

x此代码适用于您的示例

data.frame("From"=df$From[c(TRUE, head(df$To, -1) != tail(df$From, -1))], 
           "To"=df$To[c(head(df$To, -1) != tail(df$From, -1), TRUE)])
  From To
1    a  d
2    e  f

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

Hi Wimpel,您停留在哪一步?你能展示一下你使用的代码吗?为了获得更好的想法,请查看
c(head(df$To,-1)
tail(df$From,-1)
的输出,然后
c(head(df$To,-1)!=tail(df$From,-1),TRUE)
应该作为一个逻辑向量来理解。例如,这个逻辑向量用于子集
df$To
data.frame("From"=df$From[c(TRUE, head(df$To, -1) != tail(df$From, -1))], 
           "To"=df$To[c(head(df$To, -1) != tail(df$From, -1), TRUE)])
  From To
1    a  d
2    e  f