繁体   English   中英

如何汇总数据框中的行并保留分组变量第二次出现的字符值?

[英]How can I summarize rows in a data frame and keep the character values from the second occurrence of the grouping variable?

我试图通过添加数字行值并保留分组变量第二次出现的字符值来汇总数据框中的行。

我有下面列出的数据框:

df <- data.frame(
  Season = c('Summer', 'Fall', 'Fall', 'Winter','Spring', 'Spring'),
  Number = c(1,2,2,6,7,2),
  Character = c('1s', '2s', 's', '1s', '3s', 'q')
)

去向

  Season Number Character
1 Summer      1        1s
2   Fall      2        2s
3   Fall      2         s
4 Winter      6        1s
5 Spring      7        3s
6 Spring      2         q

我正在尝试将数据汇总为下面列出的格式,但dplyr的汇总函数不适用于非数字列。

这是我预期的 output...

  Season Number Character
1 Summer      1        1s
2   Fall      4        s
4 Winter      6        1s
5 Spring      9        q

您可以在summarize()中使用[[2]] 您还必须处理只有一行的组。

library(dplyr)

df %>%
  group_by(Season) %>%
  summarize(
    Number = sum(Number),
    Character = ifelse(length(Character) > 1, Character[[2]], Character)
  ) %>%
  ungroup()
# A tibble: 4 × 3
  Season Number Character
  <chr>   <dbl> <chr>    
1 Fall        4 s        
2 Spring      9 q        
3 Summer      1 1s       
4 Winter      6 1s       

一种方法是使用last来选择正确的字符串,因为它总是这样排序的。

library(dplyr)

df %>% 
  group_by(Season) %>% 
  summarize(across(Number:Character, ~ ifelse(is.numeric(.x), sum(.x), last(.x))))
# A tibble: 4 × 3
  Season Number Character
  <chr>   <dbl> <chr>
1 Fall        4 s
2 Spring      9 q
3 Summer      1 1s
4 Winter      6 1s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM