r-动态地(在i、j和by中)分配/引用data.table中的列名



A(而不是这个(其中cars <- data.table(cars)(

cars[ , .(`Totals:`=.N), by=speed]  

我需要这个

strColumnName <- "Totals:"
cars [ , strColumnName = .N, by=speed]  

怎么做?

B( 类似(更一般的情况(-而不是这样:

cars[ dist > 50, .(`Totals:`=.N, x=dist*100), by=speed] 

我需要这个:

strFactor <- "dist"
cars[ strFactor > 50, .(`Totals:`=.N, x=strFactor*100), by=speed] 

这个问题是关于在data.table中,即在"j"(RHS和LHS(中,以及在"i"one_answers"by"中动态分配/引用列名变量的一般方法。当在代码的其他地方选择时(例如,用户我在闪亮的应用程序中输入它们(,这是需要的

C( 涉及i,j和by的一般情况-而不是这个:

cars[ dist > 50, .(`Totals x Factor: ` = .N * dist), by=speed] 

我需要这个:

strFactor <- "dist"; 
strNewVariable <- "Totals x Factor: "
strBy <- "speed"
cars[ strFactor > 50, .(strNewVariable = .N * strFactor), by=strBy] 

编辑:根据您的说明,这里有一种使用setNamesget的方法。这里的技巧是..指示在调用环境中进行求值。

library(data.table)
cars <- data.table(cars)
strFactor <- "dist"
strNewVariable <- "Totals x Factor: "
strBy <- "speed"
cars[ get(strFactor)  > 50, 
setNames(.(.N * get(..strFactor)),strNewVariable),
by=strBy] 

我们可以使用:=并用()包装变量来评估它,而不是将其从字面上归类为

library(data.table)
cars[ , (strColumnName) := .N, by=speed]  

如果我们需要一个汇总列,

setnames(cars[, .N, by = speed], 'N',  strColumnName)[]

使用更新的代码

cars[eval(as.name(strFactor)) > 50, .(`Totals:`=.N, x=eval(as.name(strFactor))*100), by=speed]

最新更新