R 在`by`参数中使用字符向量
在R中的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:
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