【问题标题】:Finding number of NA in multiple columns by group [duplicate]按组查找多列中的NA数[重复]
【发布时间】:2018-02-07 02:36:03
【问题描述】:

我有一个不同城市和他们拥有的不同运动队的数据集:

**City**    **Basketball**  **Soccer**    **Tennis**    **Football**
   AA         Titans          Astros       Royals         Eagles
   AA         Crimson           NA         Falcons        Packers
   AA           NA            Phoenix      Tigers           NA
   AA         Goblins           NA         Lions            NA
   BB           NA              NA           NA             NA
   BB         Bears           Rockets      Broncos          NA
   CC         Pelicans        Wildfires    Panthers         NA
   CC           NA            Bobcats      Blizzard         NA
   CC           NA              NA         Tornadoes        NA
   CC           NA              NA         Hurricanes       NA

我想按城市对数据进行分组,并找到每个城市每列的 NA 总数。我该怎么做呢?我做了一些研究后尝试过这个

aggregate(df[,2:4], by=list(df$City), colSums(is.na(df)))

但它不起作用......

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    基地 R 是你的敌人。

    data.table 更友好:

    library(data.table)
    setDT(df) # <- convert to data.table
    # going column-by-column, count NA
    df[ , lapply(.SD, function(x) sum(is.na(x))), by = City]
    

    请参阅 Getting Started with data.tableprimer on .SDthis on the use of lapply(.SD,...) 了解更多信息。

    请注意,使用colSums 需要将您的data.frame 转换为matrix,这将强制所有列具有相同的类(此处为character),如果它们还没有,则可能很昂贵。

    【讨论】:

      【解决方案2】:

      您的aggregate 语法有点不对劲。使用正确的自定义匿名函数,它应该可以工作:

      aggregate(df[,2:4], by=list(df$City), FUN=function(x) { sum(is.na(x)) })
      

      Demo

      【讨论】:

        猜你喜欢
        • 2018-03-20
        • 2017-07-14
        • 2022-01-27
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2022-10-04
        相关资源
        最近更新 更多