2017-08-24 3 views
1

df1の最初の列[A]の対応する値が、次の値より大きいか等しい場合、df1の列の値を合計したいとします。 df2の値。私はdf2でこれをやりたいと思う範囲の値を持っています。 1列に SUMIF(DF1 $ A、> = DF2 $値、DF1ます$ B):SUMIF列Aが別のデータフレームの列Cより大きいか等しい場合

Excelの式は次のようになります。

DF1:

[A] [B] [C] 
    1  10  20 
    2  20  20 
    3  20  30 
    4  10  50 
    5  30  10 

DF2:

Value 
    1 
    3 
    5 

OUTPUT:私たちはbase R

Value SUM[df1$B] SUM[df1$C] 
    1   90   130 
    3   60   90 
    5   30   10 

答えて

0

を試すことができます。 'df2'の 'Value'カラムをループし、 'A'カラムが 'df2'の値以上であるかどうかに基づいて 'df1'をサブセット化し、 'B' C」列、rbindlist要素は、単一のデータセット

res <- do.call(rbind, lapply(df2$Value, function(x) cbind(Value = x, 
      as.data.frame.list(colSums(df1[df1$A >= x, 2:3]))))) 
names(res)[-1] <- paste0("SUM_", names(res)[-1]) 
res 
#  Value SUM_B SUM_C 
#1  1 90 130 
#2  3 60 90 
#3  5 30 10 

を作成するか、別のオプションはdata.table

library(data.table) 
CJ(A=df1$A, Value = df2$Value)[A >= Value][df1, on = .(A) 
      ][, lapply(.SD, sum),Value, .SDcols = B:C] 
# Value B C 
#1:  1 90 130 
#2:  3 60 90 
#3:  5 30 10 
0

基地Rを介して考え、

あります

与え、

value SUM_V2 SUM_V3 
1  1  90 130 
2  3  60  90 
3  5  30  10 
関連する問題