【问题标题】:Count number of rows with at least one value [duplicate]计算至少有一个值的行数[重复]
【发布时间】:2020-01-06 22:44:25
【问题描述】:

我有一个这样的 df:

a   b   c   d
1   1   1   1
2   2   3   NA
3   NA  NA  2 
4   NA  2   NA
5   NA  NA  NA

是否有可能计算出有多少行在所有变量上都没有非缺失值,因此例如这里它将返回 4,因为其余的部分至少有一个 none NA 值变量。

【问题讨论】:

  • 不应该为您的示例数据(第一行)“计算有多少行在所有变量上具有非缺失值”返回 1 吗?也许您需要更清楚地解释逻辑。
  • 是的,这是一个错字已经编辑了问题
  • 您是否在计算中忽略了a 列?那么sum(rowSums(!is.na(df[-1])) > 0) ?
  • “有多少行没有所有变量的非缺失值” 你的意思是有多少行最后一个NA 条目?例如。 sum(is.na(rowSums(df)))?
  • 没有。在此示例中,答案应为 4。您需要从计算中排除 a var,因为它是 ID 号

标签: r dplyr


【解决方案1】:

既然现在很清楚我们想从计算中忽略列a。这里有几种方法:

使用rowSums

sum(rowSums(!is.na(df[-1])) > 0)
#[1] 4

#OR

sum(rowSums(is.na(df[-1])) != (ncol(df) - 1))

使用apply

sum(apply(!is.na(df[-1]), 1, any))

#OR

sum(!apply(is.na(df[-1]), 1, all))

使用dplyr中的filter_at根据条件过滤行,但我们可以使用nrow来获取满足我们要求的行数。

library(dplyr)
df %>%  filter_at(-1, any_vars(!is.na(.))) %>% nrow

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多