1
我想知道如何在data.table中傳遞用戶定義的函數。獲取data.table中的用戶定義函數工作
我使用data.table創建了以下代碼,用於計算兩個組中的所有有效響應('a'或'b')中響應'b'的百分比; GRP1和GRP2:
的數據(用警告消息):
library(data.table)
dt = data.table(rep(c("I", "II", "III", "IV")), rep(c("A", "B", "C")),
rep(c("a", "a", "b", "b", "b"), 20))
colnames(dt) = c("grp1", "grp2", "Q1")
計算%受訪者的代碼:
dt[, sum(Q1 %in% "b")/sum(!is.na(Q1))*100, by = grp1:grp2][order(grp1, grp2)]
這會產生什麼,我需要(感謝@Frank你的幫助,在Calculate % respondents by more than one group for a survey data):
grp1 grp2 V1
1: I A 55.55556
2: I B 62.50000
3: I C 62.50000
4: II A 62.50000
5: II B 55.55556
6: II C 62.50000
7: III A 50.00000
8: III B 62.50000
9: III C 66.66667
10: IV A 66.66667
11: IV B 62.50000
12: IV C 50.00000
我想要做的是創建一個函數並使用它計算50個其他項目的等價值集合。我創建了以下函數,希望儘量減少重複過程;
test = function(question, groupA, groupB){
dt[, sum(get(question) %in% "b")/sum(!is.na(get(question)))*100, by = eval((c(groupA, groupB)))][order(groupA, groupB)]
}
test(question = "Q1", groupA = "grp1", groupB ="grp2")
然而,這僅返回頂部行:
grp1 grp2 V1
1: I A 55.55556
我堆棧溢出閱讀其他物品(如Using data.table i and j arguments in functions),並嘗試過其他代碼,但我一直沒能找到讓它工作的方法。
我是R的新手,非常感謝您的反饋。
'通過/ keyby = C(A組,B組)'讀取清潔 – MichaelChirico
@dww,非常感謝你分享你的知識!它工作完美!弗蘭克和MichaelChirico非常感謝你的貢獻!我會努力學習:) – tmr
我認爲']'之前的最後'''是不必要的?我試圖編輯它,但它不到6個字符,所以我不能建議chsnge ... – tmr