合并具有部分相同值的行
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 的值。非常感谢。以上是关于合并具有部分相同值的行的主要内容,如果未能解决你的问题,请参考以下文章