R data.table给出了错误:k<;=n不是真的

R data.table给出了错误:k<;=n不是真的,r,data.table,dplyr,zoo,R,Data.table,Dplyr,Zoo,我正在尝试将以下dplyr代码转换为等效的data.table。 但是,data.table(而不是dplyr)给出了错误信息。 错误:k% 分组依据(am,vs)%>% 变异(cumsum\u mpg=cumsum(mpg),cummin\u disp=cummin(disp),rollmean\u wt=rollmean(wt,k=2,fill=0,align=“right”)) #使用data.table 库(数据表) 图书馆(动物园)#rollmean函数 DT你可以试试 DT[cyl=

我正在尝试将以下dplyr代码转换为等效的data.table。 但是,data.table(而不是dplyr)给出了错误信息。
错误:k%
分组依据(am,vs)%>%
变异(cumsum\u mpg=cumsum(mpg),cummin\u disp=cummin(disp),rollmean\u wt=rollmean(wt,k=2,fill=0,align=“right”))
#使用data.table
库(数据表)
图书馆(动物园)#rollmean函数
DT你可以试试

DT[cyl==6][,(mynames):= list(cumsum(mpg), cummin(disp), 
         rollmean(wt,k=2,fill=0,align="right")), by=.(am, vs)][]
#            mpg cyl  disp  hp drat    wt  qsec vs am gear carb cumsum_mpg cummin_disp
#1: 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1       21.4       258.0
#2: 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1       39.5       225.0
#3: 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4       58.7       167.6
#4: 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4       76.5       167.6
#5: 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4       21.0       160.0
#6: 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4       42.0       160.0
#7: 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6       61.7       145.0
#   rollmean_wt
#1:      0.0000
#2:      3.3375
#3:      3.4500
#4:      3.4400
#5:      0.0000
#6:      2.7475
#7:      2.8225
或者如果您需要以与
dplyr中相同的行顺序获取结果

 DT <- as.data.table(mtcars)
 setkey(DT, cyl)
 DT[J(6)][, (mynames) := list(cumsum(mpg), cummin(disp), 
       rollmean(wt,k=2,fill=0,align="right")), by=.(am, vs)][]

DT谢谢@akrun。在第二个解决方案中,您能解释一下
J(6)
代表什么吗?是不是
cyl==6
?@Metrics我们将键设置为
cyl
join
cyl==6
,但更快速地感谢@akrun@Metrics没有问题。
?J
可能有助于理解它better@Metrics,请查看小插图,了解
J()
或等效的
()
的含义。
 DT <- as.data.table(mtcars)
 setkey(DT, cyl)
 DT[J(6)][, (mynames) := list(cumsum(mpg), cummin(disp), 
       rollmean(wt,k=2,fill=0,align="right")), by=.(am, vs)][]