【问题标题】:Length of grouped columns, excluding NAs [duplicate]分组列的长度,不包括 NA [重复]
【发布时间】:2023-03-26 21:23:02
【问题描述】:

如何找到分组列的长度,不包括 NA?

例如,用下面的数据框,

Year  State var1  var2
TX    2     NA
WA    0     3
CA    NA    1
CA    2     NA
CA    2     3
TX    NA    4
WA    NA    NA
WA    3     3
CA    NA    0

我希望它返回

State var1  var2
TX    1     1
WA    2     2
CA    2     3

有人问了一些类似的问题(例如R - Get number of values per group without counting NAs),但我仍在努力获得我想要的输出。

我在 summarise_ifsummarise_all 上尝试了几种变体,但它们要么抛出错误,要么计算不正确。

counts <- df %>%
group_by(State) %>% 
summarise_all(funs(length(!is.na(.))))

【问题讨论】:

  • sum(!is.na(x))

标签: r


【解决方案1】:

只需创建一个匿名函数,返回is.na()返回的逻辑向量之和即可:

library(dplyr)

df %>% 
  group_by(State) %>% 
  summarise_all(.funs = function(x) { sum(!is.na(x)) })

# A tibble: 3 x 3
   State  var1  var2
  <fctr> <int> <int>
1     CA     2     3
2     TX     1     1
3     WA     2     2

【讨论】:

    【解决方案2】:

    带data.table:

    library(data.table)
    setDT(df)
    df[,lapply(.SD, function(x) sum(!is.na(x))),State]
    
       State var1 var2
    1:    TX    1    1
    2:    WA    2    2
    3:    CA    2    3
    

    【讨论】:

      【解决方案3】:

      dplyr 方法:

      df=tibble(State,var1,var2)%>%group_by(State)%>%summarize(var1=sum(!is.na(var1)),var2=sum(!is.na(var2)))
      > df
      # A tibble: 3 x 3
        State  var1  var2
        <chr> <int> <int>
      1 CA        2     3
      2 TX        1     1
      3 WA        2     2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多