0

有人可以帮我找到答案线程或提供解决方法吗?我找不到解决方案。

我想做的事:

对于每一行,如果“x”列中的值为“A”,则从同一行中选择“y”列中的值,如果“x”列中的值为“B”,则选择“z”列中的值从同一行。理想情况下收集在一个向量中,然后作为新列包含在 df 中。

df <- data.frame(x = c("A", "B", "B", "A"), y = c(1,2,3,4), z = c(4,3,2,1), fix.empty.names = FALSE)
df

  x y z
1 A 1 4
2 B 2 3
3 B 3 2
4 A 4 1

result 

[1] 1 3 2 4

非常感谢您提前

4

1 回答 1

1

如果我们可以假设x总是“A”或“B”:

ifelse(df$x == "A", df$y, df$z)

更普遍:

ifelse(df$x == "A", df$y, ifelse(df$x == "B", df$z, NA))

当然,您可以将其直接分配为新列:df$result <- ifelse...

如果你喜欢dplyr

library(dplyr)
df %>%
  mutate(
    result = case_when(
      x == "A" ~ y,
      x == "B" ~ z,
      TRUE ~ NA_real_
    )
  )
于 2021-11-02T15:33:30.307 回答