簡體   English   中英

在 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 = ','))

在此代碼中,對於其他組合並具有不同值的其他行,它們的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM