R-根据与第二个列表混合的条件从列中获取值的总和

R-根据与第二个列表混合的条件从列中获取值的总和,r,dplyr,R,Dplyr,当我尝试对两个列表执行操作时,我收到一条错误消息,并且计算无法正常工作。(请参阅问题末尾) 清单2 解决方案 id ... sum_of_parts count 1 ... 2 1 3 ... 9 3 4 ... 10 2 88 ... 6 1 99 ... 11 1 但是,由于我的列表

当我尝试对两个列表执行操作时,我收到一条错误消息,并且计算无法正常工作。(请参阅问题末尾)

清单2

解决方案

id   ...  sum_of_parts    count
 1   ...        2           1   
 3   ...        9           3
 4   ...        10          2
88   ...        6           1
99   ...        11          1
但是,由于我的列表2比列表1小得多,我确实会出现以下错误(还有一些错误,但它们看起来几乎相同): 在list1$id请帮帮我。

你真的很接近,这一次我一直都受不了

mutate
按组操作,我相信,如果您没有指定组,它将尝试在向量化操作中使用整个列(通常效率更高),从而避免不同长度的错误

如果要对每一行进行操作,可以使用
rowwise()
,使以下计算将每一行视为一个组。因此,
id
将是
mutate
调用中的长度为1的向量

注意:我们需要在分组之前指定滞后,否则使用上述逻辑,在长度为1的向量中将没有先前的
id

库(dplyr)
列表1%
行()
变异(部分的总和=总和(列表1$part[(列表1$id lag\u id)]),
计数=长度(list1$part[(list1$id lag\U id)])%>%
选择(-lag_id)
#>来源:本地数据帧[5 x 3]
#>小组:
#> 
#>#tibble:5 x 3
#>零件计数的id和
#>           
#> 1     1           2     1
#> 2     3           7     2
#> 3     4           6     1
#> 4    88           0     0
#> 5    99          11     1

您可以使用
rowwise
而不是显式地指定组(键),然后根据它进行分组。这是一个好主意,更具可读性和简洁性。这将节省我以后不必要的输入:)可以使用list2$id lag(list2$id)进行计数猜测。谢谢你的回答。它起作用了,它救了我:))
  id    Part   ...
  1      2
  2      3
  3      4
  4      6
  99     11
  100     11
  191    11
  222     11
  333    11
id   ...
 1
 3
 4
 88
 99
id   ...  sum_of_parts    count
 1   ...        2           1   
 3   ...        9           3
 4   ...        10          2
88   ...        6           1
99   ...        11          1