合并具有相等和不相等数据的行

Tho*_*rst 6 r reshape

我正在努力合并一些凌乱的数据.

我有一个像这样的数据框:

df <- data.frame(name = c("A", "A", "B", "B", "C", "C"), 
                 number = c(1, 1, 2, 2, 3, 3), 
                 product = c("fixed", "variable", "aggregate", "variable", "fixed", "fixed"), 
                 vol = c(1, 9, 2, 6, 4, 7)
                 )
Run Code Online (Sandbox Code Playgroud)

以下是我正在努力的方向:

result <- data.frame(name = c("A", "B", "C"), 
                     number = c(1, 2, 3), 
                     new_product = c("fixed variable", "aggregate variable", "fixed"), 
                     vol = c(10, 8, 11) 
                     )
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要合并数据框中的所有相等行.如果它们不是唯一的,我需要将它们合并为一个名称,如结果中的名称.

我已经尝试了一个dplyr,但在dplyr中我无法以任何有意义的方式使new_product合并,因为我无法再次引用同一列.

df %>% group_by(name) %>% summarize (name = name, 
number = number, 
newproduct = paste(product, product) # ???? 
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢!

Dav*_*urg 7

这是我如何使用data.table,但我不确定你如何定义number

library(data.table)
result <- setDT(df)[,.(new_product = toString(unique(product)), vol = sum(vol)), by = name]
result[, number := .I]
result
#    name         new_product vol number
# 1:    A     fixed, variable  10      1
# 2:    B aggregate, variable   8      2
# 3:    C               fixed  11      3
Run Code Online (Sandbox Code Playgroud)

注意:如果您更喜欢输出,可以使用paste(unique(product), collapse = " ")而不是toString.

或类似的 dplyr

df %>% 
  group_by(name) %>% 
  summarise(new_product = toString(unique(product)), vol=sum(vol)) %>% 
  mutate(number = row_number())
Run Code Online (Sandbox Code Playgroud)