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
# ...