在 R 的 data.table 中使用 NSE
using NSE in data.table in R
我有一个名为 client
的 data.table,它有以下列:
"location" "clientID" "gender" "age" "startYear" "ag1" "ag2"
有 age
变量和它的两个分解版本:ag1
和 ag2
。
现在我想使用 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
我有一个名为 client
的 data.table,它有以下列:
"location" "clientID" "gender" "age" "startYear" "ag1" "ag2"
有 age
变量和它的两个分解版本:ag1
和 ag2
。
现在我想使用 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