r - 如何根据 R 中另一个数据帧的信息更改行值

标签 r

我有原始的 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/

相关文章:

r - 使用 `ggplot2` 使用另一条具有相同位置但在 `geom_curve` 中剪切开头和结尾的曲线来重叠曲线

r - 在多列上使用 tidyr 的 pivot_wider 的问题

r - 替代 R 中的子集?

RStudio - 在查看器 Pane 中渲染 html 内容

r - 如何评估 R 包中动态库中的 C 函数?

r - 在 dplyr 过滤器行中 NA 数量大于 1

r - 带有分类变量的频率计数

r - 在 rmarkdown 文件/codechunk 中使用 Rstudio 误解 echo = false

r - 向矩阵的所有行添加一个向量

r - 手动颜色和条件填充而不覆盖geom_point中的position_dodge?