我在 SumIfs_1 列中得到了正確的輸出,下面顯示了下面的代碼,該列計算陣列中所有 Code2 的總和,用于陣列中所有 Code1 都 < 當前行 Code1的單一條件:
Name Group Code1 Code2 SumIfs_1
1 B 1 0 1 1
2 R 1 1 0 2
3 R 1 1 2 2
4 R 2 3 0 4
5 R 2 3 1 4
6 B 3 4 2 5
7 A 3 -1 1 0
8 A 4 0 0 1
9 A 1 0 0 1
代碼:
library(dplyr)
myData <-
data.frame(
Name = c("B","R","R","R","R","B","A","A","A"),
Group = c(1,1,1,2,2,3,3,4,1),
Code1 = c(0,1,1,3,3,4,-1,0,0),
Code2 = c(1,0,2,0,1,2,1,0,0)
)
myData %>% mutate(SumIfs_1 = sapply(1:n(), function(x) sum(Code2[1:n()][Code1[1:n()] < Code1[x]])))
我想擴展代碼以向上述sumifs()等效項添加另一個條件,創建一個sumifs()具有多個條件的條件,其中我們只為陣列中的組添加那些代碼 2,它們 < 比當前行組,如該影像中進一步解釋的那樣(橙色顯示已在 Excel 中與上述代碼等效的內容SumIfs_1,黃色顯示sumifs()我正在嘗試添加的更多條件(SumIfs_2)):

有關如何執行此操作的任何建議?
如果可能的話,我想堅持使用sapply(),更重要的是,我想堅持使用 dplyr 或 base R,因為我試圖防止包膨脹。
對于它的價值,這是我生成列的卑微嘗試SumIfs_2(不起作用):
myData %>% mutate(SumIfs_2 = sapply(1:n(), function(x) sum(Code2[1:n()][Code1[1:n()] < Code1[x]][Group[1:n()] < Group[x]])))
uj5u.com熱心網友回復:
您幾乎在做同樣的事情,您只需要在子集化的位置添加另一個&條件。
您也不需要呼叫Code1[1:n()],當您呼叫 Code1 時,它已經獲取了 Code1 列中的所有值。
我相信你正在尋找
myData %>% mutate(SumIfs_2 = sapply(1:n(), function(x) sum(Code2[(Code1 < Code1[x]) & (Group < Group[x])])))
Name Group Code1 Code2 SumIfs_2
1 B 1 0 1 0
2 R 1 1 0 0
3 R 1 1 2 0
4 R 2 3 0 3
5 R 2 3 1 3
6 B 3 4 2 4
7 A 3 -1 1 0
8 A 4 0 0 1
9 A 1 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/504375.html
