【问题标题】:Sum column with a condition in R [duplicate]R中具有条件的求和列[重复]
【发布时间】:2016-12-16 23:44:16
【问题描述】:

我有一个这样的数据框:

df <- data.frame(a=c(111,111,111,222,222,222,333,333,333),
                 b=c(1,0,1,1,1,1,0,0,1))
df
    a b
1 111 1
2 111 0
3 111 1
4 222 1
5 222 1
6 222 1
7 333 0
8 333 0
9 333 1

我需要得到每个 'a' 的列 'b' 的总和:

    A B
1 111 2
2 222 3
3 333 1

我怎样才能以最快的方式做到这一点?

【问题讨论】:

    标签: r sum aggregate


    【解决方案1】:
     aggregate(df$b, by=list(df$a), FUN=sum)
    

    【讨论】:

      【解决方案2】:

      一般来说,大数据最快的方法是使用data.table

      install.packages("data.table", type = "source",
      repos = "http://Rdatatable.github.io/data.table")
      library("data.table")
      
      df <- data.frame(a=c(111,111,111,222,222,222,333,333,333),
                   b=c(1,0,1,1,1,1,0,0,1))
      df <- as.data.table(df)
      df[, sum(b), by = a]
      

      【讨论】:

      • 您的最后一行代码不会产生 OP 描述的输出。这非常接近:df[, sum(b), by=a]
      【解决方案3】:

      你可以使用 dplyr:

      df %>% group_by(a) %>% summarise(.,b = sum(b))
      

      【讨论】:

        【解决方案4】:

        如果我们使用包 dplyr,我们真的需要这样的代码吗(正如其他 PhilC 所提到的):

        df %>% group_by(a) %>% summarise(.,b = sum(b))?

        这样不行吗?

        df %>% group_by(a) %>% summarise(b = sum(b))?

        【讨论】:

          猜你喜欢
          • 2022-11-29
          • 1970-01-01
          • 2014-08-22
          • 1970-01-01
          • 1970-01-01
          • 2021-06-08
          • 1970-01-01
          • 2016-04-14
          • 1970-01-01
          相关资源
          最近更新 更多