如何合并R语言DataFrame中的重复行并拼接对应昵称列内容
R语言合并重复行并拼接对应列内容方案
前置修正:重复行筛选代码问题
你当前使用的nick2 <- subset(nick, any(duplicated(nick$Names)))逻辑存在错误:any(duplicated(nick$Names))返回的是单布尔值,只要整个数据集存在重复的Names就返回TRUE,最终会返回整个数据集而非仅重复行子集。如需筛选出所有存在重复的Names对应的行,可使用以下代码:
nick2 <- nick[duplicated(nick$Names) | duplicated(nick$Names, fromLast = TRUE), ]
合并重复行拼接Nicknames的实现方法
方法1:dplyr包实现(写法简洁易读)
- 加载依赖包:
library(dplyr) - 全数据集合并代码:
merged_df <- nick %>% group_by(Names) %>% summarise(Nicknames = paste(Nicknames, collapse = ", ")) %>% ungroup()
- 仅处理重复行子集的话,将上述代码中的
nick替换为nick2即可,collapse参数可自定义拼接分隔符(如;、|等)。
方法2:基础R实现(无需额外安装依赖)
核心代码如下:
merged_df <- aggregate(Nicknames ~ Names, data = nick, FUN = paste, collapse = ", ")
- 同理,替换
data参数的数据集即可处理筛选后的重复行子集。
可选优化
如果Nicknames列存在空值或NA值,可在合并前先过滤无效值:
# 基础R过滤 nick_clean <- nick[!is.na(nick$Nicknames) & nick$Nicknames != "", ] # dplyr过滤 nick_clean <- nick %>% filter(!is.na(Nicknames), Nicknames != "")
内容的提问来源于stack exchange,提问作者Fern
相关产品推荐
相关产品推荐

