在data.table中获取用户定义的函数

时间:2017-03-17 17:12:47

标签: r function data.table

我想知道如何在data.table中传递用户定义的函数。

我使用data.table创建了以下代码来计算响应百分比' b'两组之外的所有有效回复(' a'或' 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

我已经阅读了Stack Overflow上的其他项目(例如Using data.table i and j arguments in functions)并尝试了其他代码,但我还没有找到办法让它发挥作用。

我是R的新手,非常感谢您提供的任何反馈。

1 个答案:

答案 0 :(得分:1)

问题在于您指定Content参数的方式。我们也可以使用by代替keyby,一步完成排序:

by