在 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
值。
所以我有一个大数据集(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
值。