提问者:小点点

折叠/合并具有非空单元格/值的多行


我试图通过一个类似的组合并两行,我通过查看堆栈溢出的不同问题(问题1,问题2,问题3)。所有这些问题都说明了我想要什么,但我的数据框中也有一些空字段,我不想合并它们。我只想合并基于Col1的相似/重复行,其中包含值而不是空的或NA。我使用下面的代码,但它也合并了空的单元格或NA

merge_my_rows <- df %>%
  group_by(Col1) %>%
  summarise(Col2 = paste(Col2, collapse = ","))

下面是我想要的示例df和输出df。

输出df


共2个答案

匿名用户

您可以设置一个新的分组列na. grp,它为Col2中的每个NA提供一个唯一的编号,并为这些非NA元素提供一个通用编号。

library(dplyr)

df %>%
  group_by(Col1, na.grp = ifelse(is.na(Col2), cumsum(is.na(Col2)), 0)) %>%
  summarise(Col2 = paste(Col2, collapse = ", "), .groups = "drop") %>%
  select(-na.grp)

# # A tibble: 5 × 2
#   Col1  Col2       
#   <chr> <chr>      
# 1 C64   NA         
# 2 C64   NA         
# 3 D19   Marquis    
# 4 D23   John, JohnY
# 5 F212  ALICE, BOB 
df <- read.table(text = "
Col1  Col2
F212  ALICE
D23   John
C64   NA
F212  BOB
C64   NA
D23   JohnY
D19   Marquis", header = TRUE)

匿名用户

使用reframe

library(dplyr)
df1 %>% 
  reframe(Col2 = if(all(is.na(Col2))) Col2 else toString(Col2[!is.na(Col2)])
      , .by = "Col1")

-输出

Col1        Col2
1 F212  ALICE, BOB
2  D23 John, JohnY
3  C64        <NA>
4  C64        <NA>
5  D19     Marquis