R中按第一列取值将指定行所有数值改为NA的实现(base R/dplyr)
错误原因说明
你原有代码的核心问题是mutate_at的第一个参数用于指定需要修改的列,不能传入行筛选逻辑,row()函数的用法也不符合需求,才会触发逻辑判断类报错。
base R 实现
直接通过行索引定位+批量赋值即可:
# 定位A列取值为CA3、CA4的行 target_rows <- df$A %in% c("CA3", "CA4") # 将这些行除第一列A之外的所有列赋值为NA df2 <- df df2[target_rows, -1] <- NA
dplyr 实现
推荐用新版dplyr的across语法实现(已废弃的mutate_at不推荐继续使用):
library(dplyr) df2 <- df %>% # 对除A列之外的所有列做判断 mutate(across(-A, ~ ifelse(A %in% c("CA3", "CA4"), NA, .x)))
运行后得到的df2就符合你的预期输出。
内容的提问来源于stack exchange,提问作者vcat
相关产品推荐
相关产品推荐

