我试图通过一个类似的组合并两行,我通过查看堆栈溢出的不同问题(问题1,问题2,问题3)。所有这些问题都说明了我想要什么,但我的数据框中也有一些空字段,我不想合并它们。我只想合并基于Col1
的相似/重复行,其中包含值而不是空的或NA
。我使用下面的代码,但它也合并了空的单元格或NA
。
merge_my_rows <- df %>%
group_by(Col1) %>%
summarise(Col2 = paste(Col2, collapse = ","))
下面是我想要的示例df和输出df。
输出df
您可以设置一个新的分组列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