【问题标题】:Keep colums while grouping分组时保留列
【发布时间】:2020-06-16 13:22:38
【问题描述】:

我是 R 的初学者,正在网上寻求帮助,但我在类似标题中找到的示例不太适合我的需求,因为它们只处理很少的列。 我有一个包含超过 100 列的 data.frame T1,我正在寻找类似于摘要的内容,但我想在摘要之后保留所有其他列。我考虑过使用聚合,但由于它不是一个函数,我不确定。我认为你最有希望的方式可以在下面看到。

T2 <- T1 %>% group_by(ID) %>% summarise(AGI = paste(AGI, collapse = "; "))

摘要按我想要的方式工作,但我丢失了任何其他列。

我非常感谢任何建议!非常感谢

【问题讨论】:

  • 没有示例数据我无法确认,但我认为您正在寻找mutate 而不是summarize。看起来你实际上并没有总结任何东西,只是修改了 AGI 字段。
  • @TTS 数据看起来像这样。如您所见,一个 ID 可以有多个 AGI,反之亦然,所以我想折叠所有内容并减少行号 'ID UniProt_Accession AGI 1 1 P25702 AT1G54630 2 1 F4HWZ6 AT1G54630 3 2 Q9C5M0 AT5G19760 4 3 Q9SR37 AT3G09260 5 3 Q9LKR7 AT5G28 6 4 Q9FXI7 AT1G19890'
  • 你想对剩下的列做什么?它们要么是对变量进行分组,要么必须以某种方式进行总结。你能添加预期的输出吗?

标签: r dplyr tidyverse


【解决方案1】:

扩展 TTS 的评论,如果您想保留任何其他列,则必须使用 mutate 而不是 summarise,因为正如 documentation 所说,summarise() 创建了一个新数据框。

因此你应该使用

T1 %>% group_by(ID) %>% mutate(AGI = paste(AGI, collapse = "; ")) %>% ungroup()

数据

T1 <- structure(list(ID = c(1L, 1L, 2L, 3L, 3L, 4L), UniProt_Accession = c("P25702", 
"F4HWZ6", "Q9C5M0", "Q9SR37", "Q9LKR7", "Q9FXI7"), AGI = c("AT1G54630", 
"AT1G54630", "AT5G19760", "AT3G09260", "AT5G28510", "AT1G19890"
)), class = "data.frame", row.names = c(NA, -6L))

输出

# A tibble: 6 x 3
#      ID UniProt_Accession AGI                 
#   <int> <chr>             <chr>               
# 1     1 P25702            AT1G54630; AT1G54630
# 2     1 F4HWZ6            AT1G54630; AT1G54630
# 3     2 Q9C5M0            AT5G19760           
# 4     3 Q9SR37            AT3G09260; AT5G28510
# 5     3 Q9LKR7            AT3G09260; AT5G28510
# 6     4 Q9FXI7            AT1G19890

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    相关资源
    最近更新 更多