我有原始的 df:
A <- c("A1", "A2", "A3", "A4")
B <- c(1,0,1,NA)
C <- c(0,1,0,NA)
D <- c(NA, 1, 0, NA)
df <- data.frame(A, B, C, D)
还有我的第二个 df2:
A <- c("A2", "A3")
df2 <- data.frame(A)
我想将 df_modified 修改为如下所示
A B C D
A1 1 0 NA
A2 NA NA NA
A3 NA NA NA
A4 NA NA NA
我当前的代码生成了由 NA 填充的所有行:
df_modifed <- df %>% mutate(B = case_when(df$A == df2$A ~ NA),
C = case_when(df$A == df2$A ~ NA),
D = case_when(df$A == df2$A ~ NA))
我怎样才能正确地做到这一点?
最佳答案
在base R
中,这更容易,即将逻辑索引指定为行
和没有第一列的列索引(-1
)和将这些元素分配给 NA
df[df$A %in% df2$A, -1] <- NA
-输出
> df
A B C D
1 A1 1 0 NA
2 A2 NA NA NA
3 A3 NA NA NA
4 A4 NA NA NA
或者如果我们想使用tidyverse
,请使用across
library(dplyr)
df %>%
mutate(across(where(is.numeric), ~ case_when(!A %in% df2$A~ .)))
-输出
A B C D
1 A1 1 0 NA
2 A2 NA NA NA
3 A3 NA NA NA
4 A4 NA NA NA
关于r - 如何根据 R 中另一个数据帧的信息更改行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69575999/