簡體   English   中英

使用ddply在EXCEL SUMIFS IN R中

[英]EXCEL SUMIFS IN R using ddply

我試圖為我在EXCEL中實現的下表(分別為A,B,C列)實現SUMIFS邏輯:

ID  x   y
123 3   50
123 2   -10
123 4   -20
124 3   50
124 2   -10
124 4   -20
  1. 使用以下公式創建一個新的向量z:

= IF(C2> 0;(SUMIFS($ C $ 2:$ C $ 7; $ A $ 2:$ A $ 7; A2; $ B $ 2:$ B $ 7; “> =” &B2)); C2)

  1. 向下復制公式以填充向量z,它可以工作。

  2. 對於每一行,如果“ y”> 0,則當ID相同且“ x”的值大於當前行中的“ x”的值時,公式將添加“ y”的值。

在R中,我試圖編寫一個ddply函數,但是Im正在努力陷入內部的for循環中。 所以這是我的位置:

ddply(test,。(ID,x),mutate,z = function(y))

我也嘗試過“總結”,但條件仍然存在。 我將不勝感激在定義函數(y)方面的幫助,以便獲得等效的excel結果。 非常感謝。

我將您的公式粘貼到表格中,並進行了如下修改...

=IF(C2>0,(SUMIFS($C$2:$C$7,$A$2:$A$7,A2,$B$2:$B$7,">="&B2)),C2)

我將分號改為逗號。

我得到的結果

在此處輸入圖片說明

這有點蠻力,可能不是最好的方法,但是它復制了Excel輸出:

# sample data:
df <- read.table(text = 'ID  x   y
                 123 3   50
                 123 2   -10
                 123 4   -20
                 124 3   50
                 124 2   -10
                 124 4   -20', header = TRUE)

# create a new column called 'sum_y' using the defined rules:
for(i in 1:nrow(df)){
  if (df$y[i] > 0) df$sum_y[i] = sum(df$y[df$x >= df$x[i] & df$ID == df$ID[i]])
  else df$sum_y[i] = df$y[i] 
}

# view the output:
df
   ID x   y sum_y
1 123 3  50    30
2 123 2 -10   -10
3 123 4 -20   -20
4 124 3  50    30
5 124 2 -10   -10
6 124 4 -20   -20

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM