假设我有一个包含 X, Y, Z, T
列和 100 多行的数据框:
order X Y Z T
i a k b n
j c a b n
如您所见,如果 i-th X
和 j-th Y
具有相同的值(即 a
),则 i-th Z
和 j-th Z
具有相同的值({ {1}}) 和 b
和 i-th T
具有相同的值 (j-th T
)
我想要做的是,如果 n
和 i-th X
具有相同的值(即 j-th Y
),那么 a
和 i-th Z = b
和 {{ 1}}, j-th Z = n
i-th T = n
我曾尝试在 R 中使用 j-th T = b
和 order X Y Z T
i a k b n
j c a n b
循环执行此操作,但我不能。
谁能帮我在 R 中做到这一点?
答案 0 :(得分:1)
可以用case_when
library(dplyr)
df1 <- df1 %>%
mutate(Z = case_when(lag(X) == Y~ T, TRUE ~ Z),
T = case_when(lag(X) == Y ~ lag(Z), TRUE ~ T))
-输出
df1
# order X Y Z T
#1 i a k b n
#2 j c a n b
df1 <- structure(list(order = c("i", "j"), X = c("a", "c"), Y = c("k",
"a"), Z = c("b", "b"), T = c("n", "n")), class = "data.frame", row.names = c(NA,
-2L))