【发布时间】:2016-09-22 20:14:07
【问题描述】:
我有一个包含很多列的数据框。对于数据框的每一行,我想计算有多少列是 NA。问题是我只对其中的几列感兴趣,并且想(有效地)调用这些列。
在下面的假样本中使用 mutate 的方式给了我正确的答案。
library(stringr)
df <- data_frame(
id = 1:10
, name = fruit[1:10]
, word1 = c(words[1:5],NA,words[7:10])
, word2 = words[11:20]
, word3 = c(NA,NA,NA,words[25],NA,NA,words[32],NA,NA,words[65])
) %>%
mutate(
n_words =
as.numeric(!is.na(word1)) +
as.numeric(!is.na(word2)) +
as.numeric(!is.na(word3))
)
但是,即使对于像这样的玩具示例,打字和阅读也很痛苦——当我要计算超过 3 列时,它在很大程度上是无用的。有没有更多的 R/dplyr-y 方式来写这个,也许使用select() 样式语法(例如n_words = !count_blank(word1:word3))?
我考虑过使用summarize() sans 分组,但是,我需要我正在计算的列中的数据,如果我将它们添加到group_by,我将再次调用几乎所有列。
【问题讨论】:
-
试试
rowSums(is.na(df[startsWith(names(df), "word")])),但我很困惑。您声明“我想计算有多少列是 NA”,但调用该列word_count。您想要计算 NA 还是非 NA? -
rowSums(!is.na(df[startsWith(names(df), "word")]))改为