合并具有部分相同值的行

Posted

技术标签:

【中文标题】合并具有部分相同值的行【英文标题】:Combine the rows that have partial same value 【发布时间】:2020-10-17 19:07:08 【问题描述】:

我的数据集看起来像这样 姓名 昵称 1 (弗朗茨) Xaver Vere/i, Verl, Xare, Xav(i), Xaverl, Xide 3 阿道夫 Do(i)lfal, Do(i)lferl 4 阿道夫、阿达尔伯特、阿德里安·阿德/我 5 亚历山大·赞德(i)

如您所见,第 3 行和第 4 行包含相同的值,即“Adolf”。第 3 个单元格是单个值,第 4 个单元格是多值单元格,我需要将这两个单元格组合起来,以使数据框显示每个名称的所有可能昵称以及哪些名称可以具有相同或相似的昵称一排

所以应该是这样的 姓名 昵称 3 阿道夫、阿达尔伯特、阿德里安 Do(i)lfal、Do(i)lferl、Ade/i

另外,有谁知道如何在同一个单元格中将“Do(i)lfal”之类的值更改为“Dolfal,Dilfal”,并将“Ade/i”更改为“Ade,Adi”

我只能用Base R来解决这个问题,我很挣扎。 非常感谢。

【问题讨论】:

您在寻找任何单词匹配吗?括号内也有一些单词。假设在另一行有一个没有括号的“Franz”,它们会被组合在一起 【参考方案1】:

这是你最后一个问题的答案:

数据:

df <- data.frame(
  Nickname = c("Ade/i", "Do(i)lfal")
)

恐怕这个解决方案并不优雅:

df$Nickname_new[1] <- paste0(sub("(?=.*/)(.*)/.*", "\\1", df$Nickname[1], perl = T), ",", paste0(unlist(str_split(df$Nickname[1], "\\w/")), collapse = ""))
df$Nickname_new[2] <- paste0(sub("(.*)(\\(.*\\))(.*)", "\\1\\3", df$Nickname[2]),",", sub("(.*)(\\w)\\((\\w)\\)(.*)", "\\1\\3\\4", df$Nickname[2]))

结果:

df
   Nickname  Nickname_new
1     Ade/i       Ade,Adi
2 Do(i)lfal Dolfal,Dilfal

【讨论】:

添加了新的正则表达式 能否请您提示我如何将 x 定义为我的数据集中的 col?因为 Ade/i 是昵称 col 的值。非常感谢。

以上是关于合并具有部分相同值的行的主要内容,如果未能解决你的问题,请参考以下文章

将列中具有相同值的行合并在一起

如何在Google表格中合并具有相同索引且具有不同值的行?

具有合并行的 ASP.net 网格分页

将具有相同值的多行合并为pandas中的一行

Oracle SQL 选择具有开始和结束日期的行,如果某些重叠合并行

当行值相同时如何合并jqxgrid中的行?