R中的特定总和
Specific Sum in R
我在 R 中有两个这样的数据框,第一个
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
这是一种获取所需内容的方法,可能不是最优雅的方法,但它提供了所需的输出:
如果你的 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
我在 R 中有两个这样的数据框,第一个
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
这是一种获取所需内容的方法,可能不是最优雅的方法,但它提供了所需的输出:
如果你的 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