在 R 的 data.table 中使用 NSE

using NSE in data.table in R

我有一个名为 client 的 data.table,它有以下列:

    "location"   "clientID"   "gender"     "age"  "startYear"  "ag1"        "ag2"      

age 变量和它的两个分解版本:ag1ag2

现在我想使用 ag1 分解对我的数据进行分组:

agegroup <- sym(agegroup)
clientTotal <- client[,.(NOinsureds=length(clientID)), by = .(gender, agegroup, startYear)]

导致错误:

Show in New WindowClear OutputExpand/Collapse Output Error in [.data.table(clientData, , .(NOinsureds = length(clientID)), : column or expression 2 of 'by' or 'keyby' is type symbol. Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]

我假设这是因为 NSE。我已经在网上阅读了一些关于它的内容,这就是为什么我包括 agegroup <- sym(agegroup),但它似乎不起作用。

有什么建议吗?

我会大量处理数据,我也会编写函数,所以在推荐解决方案时请记住这一点:)

是的,您的问题似乎与 NSE 有关。您可以在 by 中使用字符向量名称,而不是使用 .()

agegroup <- "ag1"
clientTotal <- client[,.(NOinsureds=length(clientID)),
                        by = c("gender", agegroup, "startYear")]

data.table 语法在功能上非常好,因为 `NSÈ 不难应用。如果对你有帮助,我写了一篇关于NSE in data.table的post。你也可以在网上找到很多资源。

根据您在评论中的说明,您应该可以使用 get()

library(data.table)
agegroup <- 'ag1'
clientTotal <- client[,.(NOinsureds=length(clientID)), by = .(gender, age = get(agegroup), startYear)]

考虑这个例子:

library(data.table)
cars <- data.table(mtcars)
strBy <- "carb"
cars[,.(avg.mpg = mean(mpg)), by = .(gear,Carborator = get(strBy))]
    gear Carborator  avg.mpg
 1:    4          4 19.75000
 2:    4          1 29.10000
 3:    3          1 20.33333
 4:    3          2 17.15000
 5:    3          4 12.62000
 6:    4          2 24.75000
 7:    3          3 16.30000
 8:    5          2 28.20000
 9:    5          4 15.80000
10:    5          6 19.70000
11:    5          8 15.00000