在 R 中合并数据集中的行时求和值

Summing values when merging rows in a data set in R

所以我有一个大数据集(50,000 行和 500 列)。我通过以下代码合并了我想要的行:

Similarities <- Home %>%
  group_by_at(c(1,2,5,9,70,26)) %>%
  summarize_all(.funs = function(x) paste(unique(x), collapse = ','))

在这段代码中,对于其他组合在一起且具有不同值的其他行,它们的输出变成一个用逗号分隔的列表。但是,现在我想对一个特定列中的所有值求和,我在其中尝试了以下代码:

Similarities <- Home %>%
  group_by_at(c(1,2,5,9,70,26)) %>%
  summarize_at(.vars = FTR, .funs = function(x) paste(sum(x))),
  summarize_all(.funs = function(x) paste(unique(x), collapse = ','))

我认为它不会起作用,因为我不确定自己在做什么。 我的目标是拥有特定列:“FTR”,当我将行合并在一起时,“FTR”中的所有值都加在一起。

数据示例为:

Total  Type  Clm   FTR     Loss

300    water  2      -103  N

200    fire   3      203   Y
 
300    water  2      100   Y

我的代码现在做的是:

Total    Type   CLM  FTR        Loss
300      water  2    -103, 100  Y, N
200      fire   3    203        Y

但我想要的是:

Total   Type   CLM    FTR   Loss
300     water   2    -3     Y, N
200     fire    3    203    Y

下面的代码对折叠的列求和,就像问题所要求的那样。

special_sum <- function(x, sep = ", ", na.rm = TRUE){
  f <- function(y, na.rm){
    y <- as.numeric(y)
    sum(y, na.rm = na.rm)
  }
  x <- as.character(x)
  x <- strsplit(x, sep)
  sapply(x, f, na.rm = na.rm)
}

随着问题中第二个 data.frame 的发布,函数 special_sum 可以按如下方式调用。组列仅用于测试目的。

Home <- read.table(text = "
Total    Type   CLM  FTR        Loss
300      water  2    '-103, 100'  'Y, N'
200      fire   3    203        Y
", header = TRUE)


Home %>%
  group_by(1, 2) %>% 
  summarize_at(vars('FTR'), special_sum)
## A tibble: 2 x 3
## Groups:   1, 2 [1]
#    `1`   `2`   FTR
#  <dbl> <dbl> <dbl>
#1     1     2    -3
#2     1     2   203

请注意,您可能应该先 sum 然后 paste 值。