R 在`by`参数中使用字符向量

R 在`by`参数中使用字符向量,r,data.table,data-manipulation,R,Data.table,Data Manipulation,在R中的data.table包中,是否有一种方法可以通过计算的参数在中指定字符向量 以下是一个使用mtcars的预期输出示例: mtcars <- data.table(mtcars) ColSelect <- 'cyl' # One Column Option mtcars[,.( AveMpg = mean(mpg)), by = .(ColSelect)] # Doesn't work # Desired Output cyl AveMpg 1:

在R中的
data.table
包中,是否有一种方法可以通过计算的
参数在
中指定字符向量

以下是一个使用mtcars的预期输出示例:

 mtcars <- data.table(mtcars)
 ColSelect <- 'cyl' # One Column Option
 mtcars[,.( AveMpg = mean(mpg)), by = .(ColSelect)] # Doesn't work

 # Desired Output 
    cyl   AveMpg
 1:   6 19.74286
 2:   4 26.66364
 3:   8 15.10000

有没有关于通过
参数在
中添加什么内容来实现这一点的建议?

试着这样使用它

mtcars <- data.table(mtcars)
ColSelect <- 'cyl' # One Column Option
mtcars[, AveMpg := mean(mpg), by = ColSelect] # Should work

mtcars来自
?数据。表
中的
by
部分指出
by
接受:

  • 包含逗号分隔的列名的单个字符串(其中空格很重要,因为列名可能包含空格
    即使在开始或结束时):例如,DT[,sum(a),by=“x,y,z”]
  • 列名的字符向量:例如,DT[,sum(a),by=c(“x”,“y”)]
是的,你可以在@cccmir的回复中使用答案。您也可以使用@akrun提到的
c()
,但这似乎有点无关,除非您需要多个列

无法使用
()
语法的原因是在
数据中。表
()
列表()
的别名。根据
by
的相同帮助,
list()
语法需要列名表达式,而不是字符串

如果要使用多个变量并将名称作为字符传递,请退出
by
帮助中的示例:

  • mtcars[,(AveMpg=mean(mpg)),by=“cyl,am”]
  • mtcars[,(AveMpg=mean(mpg)),by=c(“cyl”,“am”)]

  • 使用
    c
    mtcars[,(AveMpg=mean(mpg)),by=c(ColSelect)]
    谢谢!我觉得这很简单。实际上,使用此方法比使用c(ColSelect)更快。使用
    c()
    可能“非常无关”,但在一些警告中也提到/建议了,例如
    “by”似乎计算为列名,但不是c()或key()。如果可以,请使用by=list(…)。否则,by=eval“,deparse(bysub),”应该起作用。这是为了提高效率,因此data.table可以检测需要哪些列。
    mtcars <- data.table(mtcars)
    ColSelect <- 'cyl' # One Column Option
    mtcars[, AveMpg := mean(mpg), by = ColSelect] # Should work