样本数据集如下:
var1 | var2 | var3 |
---|---|---|
a | 1 | 2 |
b | 2 | 3 |
我想将 var1 = a 的记录链接到 var1 = b,如果 var1 = a = var3 of var1 = b 的 var2。
这样样本数据集就会变成这样:
var1 | var2 | var3 |
---|---|---|
a | 1 | 3 |
另外,如果 var1 =
b
之后的下一行也是 b
,那么该记录也将被链接,
例如:
var1 | var2 | var3 |
---|---|---|
a | 1 | 2 |
b | 2 | 3 |
b | 3 | 5 |
b | 7 | 9 |
c | 5 | 9 |
我想要的结果:
var1 | var2 | var3 |
---|---|---|
a | 1 | 5 |
b | 7 | 9 |
c | 5 | 9 |
有什么方法可以做到这一点吗?谢谢!
我猜您正在以
连续的方式从数据帧从上到下对节点(用var2
和var3
表示)进行分组。如果该过程被一行中断,例如从第 3 行到第 4 行,那么您需要从新的组开始。
这是一个老式的基础 R 选项
f <- function(df) {
res <- c()
repeat {
if (nrow(df) <= 1) {
return(rbind(res, df))
} else {
for (k in 2:nrow(df)) {
if (df$var2[k] == df$var3[k - 1]) {
df[k, c("var1", "var2")] <- df[k - 1, c("var1", "var2")] } else {
res <- rbind(res, df[k - 1, ])
df <- tail(df, -(k - 1))
break
}
}
}
}
}
你将获得
> f(df)
var1 var2 var3
3 a 1 5
4 b 7 9
5 c 5 9
> dput(df)
structure(list(var1 = c("a", "b", "b", "b", "c"), var2 = c(1L,
2L, 3L, 7L, 5L), var3 = c(2L, 3L, 5L, 9L, 9L)), class = "data.frame", row.names = c(NA,
-5L))
> df
var1 var2 var3
1 a 1 2
2 b 2 3
3 b 3 5
4 b 7 9
5 c 5 9