请运行下面的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)
答案 0 :(得分:1)
您可以使用dplyr
或data.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
版本时,请确保不会偏差/影响您的时间。