R 基于列值和下一行中不同列的值合并行
我有一个数据框,有两列:“From”和“To” 我想检查下一行的“From”是否与当前行的“to”相同。如果是,则可以用下一个“To”替换当前行中的“To”。此外,还可以删除下一行 这必须继续/循环,直到没有行的“to”与下一行的“From”相同 最终结果如下所示: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
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