我在R中有两个看起来像这样的数据框,First One
X Y Z
A B 0.01
C D 0.45
E F 0.65
第二个
ID Product Price
1 A 10
1 B 15
1 F 20
2 C 20
2 D 25
3 A 10
3 B 15
3 C 20
3 D 25
4 A 15
4 C 20
4 D 25
4 E 30
4 F 35
如何在df1中为每个X
和Y
对产品找到包含产品和总价格的第二个data.frame中的ID数量?
示例输出:
X Y Z Count(Rule) Sum(Price)
A B 0.01 2 50
C D 0.45 3 135
E F 0.65 1 65
答案 0 :(得分:1)
这是一种获得所需内容的方法,可能不是最优雅的,但却能提供所需的输出:
如果你的df被称为df1
和df2
:
df1[, c("Count(Rule)", "Sum(Price)")] <-
t(apply(df1[, 1:2], 1,
function(couple, df){
# find the IDs that have both products
Id_ok <- intersect(df$ID[df$Product %in% couple[1]], df$ID[df$Product %in% couple[2]])
# get the data.frame subset with only the desired IDs and Products
sub_df <- df[df$ID %in% Id_ok & df$Product %in% couple, ]
# return the values you need
c(count=length(Id_ok), sum_price=sum(sub_df$Price))
}, df=df2))
df1
# X Y Z Count(Rule) Sum(Price)
#1 A B 0.01 2 50
#2 C D 0.45 3 135
#3 E F 0.65 1 65