R 我想在其他列的对应值重复时添加列的值

R 我想在其他列的对应值重复时添加列的值,r,merge,duplicates,add,R,Merge,Duplicates,Add,我有一个与此类似的问题:但解决方案对我不起作用,或者我不知道如何修改它 如果Reference和nodcode都匹配,即使nodcode在Reference Number中不相邻,我也需要将Number列值相加 我有这个: structure(list(Reference = c("BBM101", "BBM102", "BBM102", "BBM102", "BBM103", "BBM103",

我有一个与此类似的问题:但解决方案对我不起作用,或者我不知道如何修改它

如果Reference和nodcode都匹配,即使nodcode在Reference Number中不相邻,我也需要将Number列值相加

我有这个:

structure(list(Reference = c("BBM101", "BBM102", 
                             "BBM102", "BBM102", "BBM103", "BBM103", 
                             "BBM104", "BBM105", "BBM105", "BBM105"), 
               NODCCODE = c("101","301", "201", "201", "201", "401", "401", "201", "102", "201"), 
               Number = c(2, 1, 3, 1, 3, 14, 3, 24, 2, 1)), 
          row.names = c(NA, 10L), class = "data.frame")
我想要这个:

structure(list(Reference = c("BBM101", "BBM102", "BBM102", "BBM103", "BBM103", "BBM104", "BBM105", "BBM105"), 
               NODCCODE = c("101","301", "201", "201", "401", "401", "201", "102"), 
               Number = c(2, 1, 4, 3, 14, 3, 25, 2)), 
          row.names = c(NA, 8L), class = "data.frame")

请注意,第3行和第4行引用了节点代码,并添加了编号列。第8行和第10行,尽管在201个值之间有102个值,所有值都具有相同的参考号,因此它们被添加。我不在乎剩下的行是在这组参考号的开头还是结尾。

我相信tidyverse就这么简单?只有一个匹配节点代码的引用之和将是唯一值,具有相同引用和节点代码的条目将被求和

图书馆管理员 结构% SummarseNumber=sumNumber%>% arrangeReference%>% 解组 后果 >一个tibble:8x3 >参考节点代码编号 > >1 BBM101 101 2 >2 BBM102 201 4 >3 BBM102 301 1 >4 BBM103 201 3 >5 BBM103 401 14 >6 BBM104 4013 >7 BBM105 102 2 >8 BBM105 201 25
由v0.3.0于2020年4月24日创建,我相信tidyverse就这么简单?只有一个匹配节点代码的引用之和将是唯一值,具有相同引用和节点代码的条目将被求和

图书馆管理员 结构% SummarseNumber=sumNumber%>% arrangeReference%>% 解组 后果 >一个tibble:8x3 >参考节点代码编号 > >1 BBM101 101 2 >2 BBM102 201 4 >3 BBM102 301 1 >4 BBM103 201 3 >5 BBM103 401 14 >6 BBM104 4013 >7 BBM105 102 2 >8 BBM105 201 25
由v0.3.0于2020年4月24日创建,如果加载data.table包,则可以使用setDT将data.frame转换为data.table

unique(dt1[, Number := sum(Number), by = c("Reference", "NODCCODE")])

这里使用dt[i,j,by]表示法,将数字之和重新分配给数字,该函数通过引用和节点代码的唯一组合来完成,并将其包装在unqiue函数中以获得unqiue行

如果加载data.table包,则可以使用setDT将data.frame转换为data.table

unique(dt1[, Number := sum(Number), by = c("Reference", "NODCCODE")])

这里使用dt[i,j,by]表示法,将数字之和重新分配给数字,该函数通过引用和节点代码的唯一组合来完成,并将其包装在unqiue函数中以获得unqiue行

谢谢,我试试看。data.table通常比data.frame更适合使用吗?data.tables来自一个包,旨在构建和改进data.frames,它们在计算工作和语法方面都更高效。因为它们建立在data.frames的基础上,它们很容易合并,不需要做很多工作,随着时间的推移,随着您对它们的了解,您可以充分发挥它们的作用。谢谢,您的答案非常有效,但我选择了另一个,因为我有更多的专栏,这与代码无关。您说的更多专栏是什么意思?总而言之,在我的数据集中还有一些与我的问题无关的列。当我尝试你的代码时,我必须先把它们全部删除才能让它工作。谢谢,我会尝试的。data.table通常比data.frame更适合使用吗?data.tables来自一个包,旨在构建和改进data.frames,它们在计算工作和语法方面都更高效。因为它们建立在data.frames的基础上,它们很容易合并,不需要做很多工作,随着时间的推移,随着您对它们的了解,您可以充分发挥它们的作用。谢谢,您的答案非常有效,但我选择了另一个,因为我有更多的专栏,这与代码无关。您说的更多专栏是什么意思?总而言之,在我的数据集中还有一些与我的问题无关的列。当我尝试你的代码时,我必须先把它们全部删除才能让它正常工作。非常好用!谢谢你,太好了!ThanksaggregateNumber~Reference+NODCCODE,df,sumggregateEnumber~Reference+NODCCODE,df,sum
unique(dt1[, Number := sum(Number), by = c("Reference", "NODCCODE")])