[英]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 = ','))
在此代碼中,對於其他組合並具有不同值的其他行,它們的 output 變為以逗號分隔的列表。 但是,現在我想對一個特定列中的所有值求和,我在其中嘗試了以下代碼:
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,可以如下調用 function 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
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.