我有两个数据集A和B:
数据集A(称为Sales)具有以下数据:
ID Person Sales
1 1 100
2 2 300
3 3 400
4 4 200
5 5 50
数据集B(称为Account_Scenarios)具有以下数据(注意 - 数据集B中有更多行,我刚刚包含前6个):
ID Scenario Person Upkeep
1 1 1 -10
2 1 2 -200
3 2 1 -150
4 3 4 -50
5 3 3 -100
6 4 5 -500
我想在数据集B中添加一个名为'Profit'的列,这样我就可以看到每个方案的每人利润(Profit = Sales + Upkeep)。例如如下:
ID Scenario Person Upkeep Profit
1 1 1 -10 90
2 1 2 -200 100
3 2 1 -150 -50
4 3 4 -50 150
5 3 3 -100 300
6 4 5 -500 -450
最好的方法是什么?我是R的新手并尝试使用聚合函数,但它要求参数长度相同。
Account_Scenarios$Profit <- aggregate(Sales[,c('Sales')], Account_Scenarios[,c('Upkeep')], by=list(Sales$Person), 'sum')
答案 0 :(得分:1)
假设Sales$Person
只有唯一值,您可以:
Account_Scenarios$Profit=Account_Scenarios$Upkeep-Sales$Sales[sapply(Account_Scenarios$Person,function(x)which(Sales$Person==x))]
答案 1 :(得分:1)
我会left_join
两个数据集库Person
变量,然后计算利润:
library(tidyverse)
A <- A %>% select(Person, Sales) # Only need the two variables for the join
df <- left_join(B, A, by = "Person") %>%
mutate(Profit = Sales + Upkeep)
答案 2 :(得分:1)
解决方案可以使用sqldf
库(sql样式join
):
library(sqldf)
A <- data.frame(Person=1:5, Sales=c(100,300,400,200,50))
B <- data.frame(Scenario=c(1,1,2,3,3,4), Person=c(1,2,1,4,3,5), Upkeep=c(-10,-200,-150,-50,-100,-500))
B <- sqldf("SELECT B.*, A.Sales + B.Upkeep as Profit FROM B JOIN A on B.Person = A.Person")