按照Sum值在R中排列数据集

时间:2018-03-28 10:36:40

标签: r group-by dplyr plyr

请运行下面的R代码,我希望使用下面的数据获取数据集,其中我有“品牌”和“糖果”列值出现一次,相应的时间值是所有这些情况的总和。为了说明,我希望前两个值“Mars”和“A”只出现一次,它们的总和“22”出现在下一列中。类似地,对于其余部分,命令也应该快速处理大数据。谢谢,请帮助。

PlanetData <- read.table(
text = "
Brand       Candy                time
Mars        A                    10
Mars        A                    12
Jupiter     B                    13     
Jupiter     B                    14 
Saturn      C                    21
Saturn      C                    26",          
header = TRUE,
stringsAsFactors = FALSE)

1 个答案:

答案 0 :(得分:1)

您可以使用dplyrdata.table尝试两种替代流程并选择最快的流程:

PlanetData <- read.table(
  text = "
  Brand       Candy                time
  Mars        A                    10
  Mars        A                    12
  Jupiter     B                    13     
  Jupiter     B                    14 
  Saturn      C                    21
  Saturn      C                    26",          
  header = TRUE,
  stringsAsFactors = FALSE)


library(dplyr)

PlanetData %>% group_by(Brand, Candy) %>% summarise(SUM = sum(time)) %>% ungroup()

# # A tibble: 3 x 3
#    Brand   Candy   SUM
#   <chr>   <chr> <int>
# 1 Jupiter B        27
# 2 Mars    A        22
# 3 Saturn  C        47


library(data.table)

setDT(PlanetData)[, .(SUM=sum(time)),by=.(Brand, Candy)]

#       Brand Candy SUM
# 1:    Mars     A  22
# 2: Jupiter     B  27
# 3:  Saturn     C  47

使用dplyr尝试stringsAsFactors = TRUE版本也很有用。它很可能(稍微?)更快。这取决于您拥有的行数和唯一值。

注意您使用setDT(PlanetData)然后PlanetData的那一刻变为data.table而不是data.frame。返回运行dplyr版本时,请确保不会偏差/影响您的时间。