R条件汇总

时间:2017-07-16 10:33:10

标签: r plyr sumifs mutate

我有一个公司专栏,一个用于销售,另一个专栏用于国家。我需要分别对每个国家/地区的所有销售额进行总结,这样我就可以为每个公司(名称)分配一列在该国的销售。所有国家/地区的销售额均以相同货币表示。

我尝试了几种方法,但它们都不起作用:

df$total_country_sales = if(df$country[row] == df$country) { sum(df$sales)} 
This sums all valuations, not only the ones that I need.


Name  Sales  Country   I would like to have a new column Total Country Sales 
abc   122    US                                                5022
abc   100    Canada
aad   4900   US

我需要将值保存在同一个数据框中,但需要在新列中。

由于它是一个大型数据集,我无法创建一个函数,而是需要将其直接保存为变量。 (或者我是否理解错误地认为制作函数不是解决此类问题的最佳方法?)

我是R的新手并且编程一般,所以我可能会以不正确的方式解决这个问题。

抱歉可能是一个愚蠢的问题。

谢谢!

3 个答案:

答案 0 :(得分:0)

如果我理解你的问题,这可以解决你的问题:

df = data.frame(sales=c(1,3,2,4,5),region=c("A","A","B","B","B"))

library(dplyr)
totals = df %>% group_by(region) %>% summarize(total = sum(sales))
df = left_join(df,totals)

它将组总计添加为单独的列,如下所示:

  sales region total
1     1      A     4
2     3      A     4
3     2      B    11
4     4      B    11
5     5      B    11

希望这有帮助。

答案 1 :(得分:0)

我们可以使用base R来执行此操作

df$total_country_sales <- with(df, ave(sales, country, FUN = sum))

答案 2 :(得分:0)

可以使用dplyr的{​​{1}}

来实现
mutate()

使用df = data.frame(sales=c(1,3,2,4,5),country=c("A","A","B","B","B")) df # sales country # 1 1 A # 2 3 A # 3 2 B # 4 4 B # 5 5 B df %>% group_by(country) %>% mutate(total_sales = sum(sales)) # Source: local data frame [5 x 3] # Groups: country [2] # # # A tibble: 5 x 3 # sales country total_sales # <dbl> <fctr> <dbl> # 1 1 A 4 # 2 3 A 4 # 3 2 B 11 # 4 4 B 11 # 5 5 B 11

data.table