【发布时间】:2020-03-23 16:53:57
【问题描述】:
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”和“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]
【问题讨论】:
-
以下不起作用
col <- strColumnName ; cars[ , (col) = .N, by=speed] ; cars[ , .((col) = .N), by=speed] ; cars[ , .((col) = .N), by=speed, with=F] ; cars[ , .(as.name(col) = .N), by=speed, with=F] -
cars[ , .N, by=speed]是一个聚合,而不是一个赋值。请澄清你到底想要达到什么目的。对于分配,有许多具有相似头衔的骗子,例如stackoverflow.com/questions/11745169/… -
您需要使用
:=设置符号。 -
在我的示例中,可以使用任何其他 RHS 语句代替 .N。这与
:=无关
标签: r data.table