Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r-data.table-将data.table结果按多列四舍五入分组_R_Data.table_Dplyr - Fatal编程技术网

r-data.table-将data.table结果按多列四舍五入分组

r-data.table-将data.table结果按多列四舍五入分组,r,data.table,dplyr,R,Data.table,Dplyr,我问了一个关于data.table和数字结果显示的问题()。评论建议我只使用by=cyl,但这不会给出dplyr结果。因此,我在这里提出一个新问题 如何使用数据表获得相同的结果(参见下面的dplyr代码) # using dplyr mtcars1 %>% group_by(cyl) %>% select(disp) %>% mutate(displace = round(disp / sum(disp), digits = 3)) # Adding missing grou

我问了一个关于
data.table
和数字结果显示的问题()。评论建议我只使用
by=cyl
,但这不会给出
dplyr
结果。因此,我在这里提出一个新问题

如何使用
数据表
获得相同的结果(参见下面的
dplyr
代码)

# using dplyr
mtcars1 %>%
group_by(cyl) %>%
select(disp) %>%
mutate(displace = round(disp / sum(disp), digits = 3))

# Adding missing grouping variables: `cyl`
# Source: local data frame [32 x 3]
# Groups: cyl [3]
# 
#      cyl  disp displace
#    <dbl> <dbl>    <dbl>
# 1      4 108.0    0.093
# 2      4 146.7    0.127
# 3      4 140.8    0.122
# 4      4  78.7    0.068
# 5      4  75.7    0.065
# 6      4  71.1    0.061
# 7      4 120.1    0.104
# 8      4  79.0    0.068
# 9      4 120.3    0.104
# 10     4  95.1    0.082
# # ... with 22 more rows
这在这里不起作用(尽管它起作用了:)

这并没有提供我想要的所有列(如中所建议的):


谢谢。

当在
数据表中使用
摘要
语法时,即不使用
:=
,您可以通过在列表中的
j
位置添加列,将列包括在结果中:

mtcars2[,.(displace = round(disp / sum(disp), digits = 3), disp), by = cyl]

#    cyl displace  disp
# 1:   6    0.125 160.0
# 2:   6    0.125 160.0
# 3:   6    0.201 258.0
# 4:   6    0.175 225.0
# 5:   6    0.131 167.6
# 6:   6    0.131 167.6
# 7:   6    0.113 145.0
# ...

mtcars2[,(displace=round(disp/sum(disp),digits=3),disp),by=cyl]
如果要将列保留在结果中,可以将列表中的
disp
换行到
j
位置。@Psidom您可以将注释作为答案吗?非常感谢。它工作得很好@Psidom,谢谢你的解释和答案。最近的邮件谢谢你的建议,但是我喜欢以前的答案。
mtcars2[ , displace = round(disp / sum(disp), digits = 3), by = list(cyl, disp)]

# Error in `[.data.table`(mtcars2, , displace = round(disp/sum(disp), digits = 3),  : 
#  unused argument (displace = round(disp/sum(disp), digits = 3))
mtcars2[ , .(displace = round(disp / sum(disp), digits = 3)), by = cyl]
mtcars2[,.(displace = round(disp / sum(disp), digits = 3), disp), by = cyl]

#    cyl displace  disp
# 1:   6    0.125 160.0
# 2:   6    0.125 160.0
# 3:   6    0.201 258.0
# 4:   6    0.175 225.0
# 5:   6    0.131 167.6
# 6:   6    0.131 167.6
# 7:   6    0.113 145.0
# ...