【发布时间】:2019-10-24 07:41:52
【问题描述】:
我有一个这样的小标题:
library(tidyverse)
df <- tibble(
id = 1:3,
names = c("George G|Nick N", "Nick N|Andrian A", "Era E")
)
names 列的名称长度不等。
我想提取这些名称并比较是否有任何常用名称。
提取:
df_names <- (lapply(df$names, function(x) {strsplit(x, split="|", fixed = TRUE)}))
现在,我不确定如何进行比较。
我尝试了类似的方法:
maxlength <- max(sapply(df_names, length))
lapply(seq(maxlength),function(i) Reduce(intersect, lapply(df_names,"[[",i)))
但返回一个空字符列表。
我的意思是通用名称,我们可以看到df_names[[1]] 和df_names[[2]] 具有通用名称Nick N。
然后,例如,我可以按 id 分组并绘制 id 与常用名称,以查看哪些 id 具有常用名称。
示例图:
【问题讨论】:
-
您能否详细说明“常用名称”的含义?你的意思是在条目之间?你能说明想要的结果是什么样的吗?
-
@RomanLuštrik:嗨,我更新了帖子。我不确定确切的最终结果,就像我在帖子中所说的那样,只能在情节中显示。
-
如果您像这样重新格式化您的数据,您的生活会更轻松:
df %>% mutate(names = strsplit(names, "|", fixed = TRUE)) %>% tidyr::unnest(names)