假设我有一个这样的数据框,其中包含列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
具有相同的值(b
)i-th T
和j-th T
具有相同的值(n
)
我想做的是,如果i-th X
和j-th Y
具有相同的值(即a
),则i-th Z = b
和j-th Z = n
和i-th T = n
,j-th T = b
order X Y Z T
i a k b n
j c a n b
我已经尝试过通过使用if else
andfor
循环在R中执行此操作,但是我做不到。
谁能帮我在R中做到这一点?
可以用 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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句