我有一个公司专栏,一个用于销售,另一个专栏用于国家。我需要分别对每个国家/地区的所有销售额进行总结,这样我就可以为每个公司(名称)分配一列在该国的销售。所有国家/地区的销售额均以相同货币表示。
我尝试了几种方法,但它们都不起作用:
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的新手并且编程一般,所以我可能会以不正确的方式解决这个问题。
抱歉可能是一个愚蠢的问题。
谢谢!
答案 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