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