data.table 添加列总和 by

问题描述 投票:0回答:1
start <- data.table(team=c('a', 'a', 'b', 'b', 'b', 'c', 'c'),
                 pts=c(5, 8, 10, 5, 5, 9, 10))
end <- data.table(team=c('a', 'a', 'b', 'b', 'b', 'c', 'c'),
                     pts=c(5, 8, 10, 5, 5, 9, 10),
                  total_pts=c(13,13,20,20,20,19,19))


endtest <- start[, `:=` .(total_pts = sum(pts)), by=team]

你能修复“endtest”以从 dt start 开始获取 dt end 吗?

data.table data-wrangling
1个回答
0
投票

.(
中的点不正确,原因有两个:

  1. 当您使用

    `:=`(..)
    时,R 期望函数后面有一个括号,而不是点,解决方法是删除点并使用 just

    start[, `:=`(total_pts = sum(pts)), by=team]
    
  2. 如果您只执行

    start[, .(total_pts=..), by=team]
    ,则可以正确解析,并且
    .(..)
    表示“用这些括号内的内容替换我的表的内容”,这意味着它将生成(此处)三行,每个
    team
    一行。由于您不想总结,所以它不是您应该使用的。只需使用

    start[, total_pts := sum(pts), by=team]
    #      team   pts total_pts
    #    <char> <num>     <num>
    # 1:      a     5        13
    # 2:      a     8        13
    # 3:      b    10        20
    # 4:      b     5        20
    # 5:      b     5        20
    # 6:      c     9        19
    # 7:      c    10        19
    
© www.soinside.com 2019 - 2024. All rights reserved.