替换数据框中的单元格

时间:2021-02-11 18:15:39

标签: r loops if-statement

假设我有一个包含 X, Y, Z, T 列和 100 多行的数据框:

order X Y Z T
 i    a k b n
 j    c a b n

如您所见,如果 i-th Xj-th Y 具有相同的值(即 a),则 i-th Zj-th Z 具有相同的值({ {1}}) 和 bi-th T 具有相同的值 (j-th T)

我想要做的是,如果 ni-th X 具有相同的值(即 j-th Y),那么 ai-th Z = b 和 {{ 1}}, j-th Z = n

i-th T = n

我曾尝试在 R 中使用 j-th T = border X Y Z T i a k b n j c a n b 循环执行此操作,但我不能。

谁能帮我在 R 中做到这一点?

1 个答案:

答案 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))