我有不同类型的变量数据,包括字符型、因子型和数字型,如下所示:
如果我只包含字符变量,那么就是相同的事情。
df <- data.frame(a = c("tt", "ss", "ss", NA), b=c(2,3,NA,1), c=c(1,2,NA, NA), d=c("tt", "ss", "ss", NA))
我正在尝试使用dplyr
中的c_across
函数,以每个观测值计算缺失值数量。
然而,c_across
似乎无法组合不同类型的值,正如下面的错误信息所示。
df %>%
rowwise() %>%
summarise(NAs = sum(is.na(c_across())))
错误:
summarise()
输入NAs
有问题。 x 无法组合a
<factor> 和b
。 ℹ 输入的NAs
是sum(is.na(c_across()))
。 ℹ 错误发生在第1行。
确实,如果只包括数值变量,它就可以工作。
df %>%
rowwise() %>%
summarise(NAs = sum(is.na(c_across(b:c))))
如果我只包含字符变量,那么就是相同的事情。
df %>%
rowwise() %>%
summarise(NAs = sum(is.na(c_across(c(a,d)))))
我可以解决此问题并避免使用 c_across
,但由于我的变量很多,因此不太实际。
df %>%
rowwise() %>%
summarise(NAs = is.na(a)+is.na(b)+is.na(c)+is.na(d))
我可以使用传统的apply
方法,如下所示,但我想用dplyr
来解决这个问题。
apply(df, 1, function(x)sum(is.na(x)))
有什么建议可以使用dplyr
高效地按行计算缺失值的数量?