如何高效将指定变量的-9替换为NA并计算有效条目总数
批量处理MED变量并统计有效条目数
问题说明
需将数据集2007d中MED1至MED8列的-9视为空值,同时生成新变量Totalmeds统计每行的有效条目(非-9)数量。
方法一:先批量替换空值再统计
如果需要保留替换后的数据集,使用dplyr的across函数(适配dplyr 1.0.0+版本,替代旧版的mutate_at):
library(dplyr) # 批量将所有MED开头列的-9替换为NA `2007d` <- `2007d` %>% mutate(across(starts_with("MED"), ~na_if(., -9))) # 统计每行MED列的非NA数量,生成Totalmeds `2007d` <- `2007d` %>% mutate(Totalmeds = rowSums(!is.na(select(., starts_with("MED")))))
方法二:不替换直接统计(更高效)
若无需修改原数据,直接统计每行中不等于-9的条目数:
library(dplyr) `2007d` <- `2007d` %>% mutate(Totalmeds = rowSums(select(., starts_with("MED")) != -9, na.rm = TRUE))
旧代码失效原因说明
之前的mutate_at未生效,大概率是因为dplyr版本过低——新版本已弃用mutate_at这类函数,推荐使用across;另外需确认变量名确实以MED开头,无大小写或拼写错误。
内容的提问来源于stack exchange,提问作者lipin lukose
相关产品推荐
相关产品推荐

