如何在保留原DataFrame前提下添加统计指定变量非NA行数的新列
解决方法
方法一:使用dplyr(保留原DataFrame所有列)
不需要用select过滤列,直接用across指定目标变量列,在原DataFrame基础上新增统计列:
df <- df %>% mutate(targ_var_count = rowSums(!is.na(across(all_of(targ_vars))), na.rm = TRUE))
方法二:Base R写法(更简洁)
如果不想用dplyr,直接用Base R的rowSums也能实现:
df$targ_var_count <- rowSums(!is.na(df[, targ_vars]), na.rm = TRUE)
为什么你的之前写法有问题?
- 第一种写法里的
select(targ_vars)会把原DataFrame过滤成只保留指定变量,之后赋值给df自然就覆盖了原数据,丢失了其他列。 - 第二种写法是把包含指定变量和新列的整个DataFrame赋值给
df$targcount,这相当于给DataFrame添加了一个列表列,而不是单一的数值列,所以结果不符合预期。
内容的提问来源于stack exchange,提问作者Monarch
相关产品推荐
相关产品推荐

