R 比较具有不同子列表元素的列表中的公共值

R 比较具有不同子列表元素的列表中的公共值,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一个像这样的tibble: library(tidyverse) df <- tibble( id = 1:3, names = c("George G|Nick N", "Nick N|Andrian A", "Era E") ) 现在,我不知道如何进行比较 我试过这样的方法: maxlength <- max(sapply(df_names, length)) lapply(seq(maxlength),function(i) Reduce(inters

我有一个像这样的tibble:

library(tidyverse)

df <- tibble(
    id = 1:3,
    names = c("George G|Nick N", "Nick N|Andrian A", "Era E")

)
现在,我不知道如何进行比较

我试过这样的方法:

maxlength <- max(sapply(df_names, length))
lapply(seq(maxlength),function(i) Reduce(intersect, lapply(df_names,"[[",i)))

maxlength您可以构建一个矩阵,其中的单元格显示ID之间的通用名称

例如:

library(proxy)
df <- df %>% mutate(sep_names = strsplit(names, split="|", fixed = TRUE))

res <- proxy::dist(df$sep_names, method = function(x, y) any(x %in% y))

# Convert to matrix and assign ids
res <- as.matrix(res)
colnames(res) <- df$id
rownames(res) <- df$id

# > res == 1
#       1     2     3
# 1 FALSE  TRUE FALSE
# 2  TRUE FALSE FALSE
# 3 FALSE FALSE FALSE

您可以构造一个矩阵,其中的单元格显示ID之间的通用名称

例如:

library(proxy)
df <- df %>% mutate(sep_names = strsplit(names, split="|", fixed = TRUE))

res <- proxy::dist(df$sep_names, method = function(x, y) any(x %in% y))

# Convert to matrix and assign ids
res <- as.matrix(res)
colnames(res) <- df$id
rownames(res) <- df$id

# > res == 1
#       1     2     3
# 1 FALSE  TRUE FALSE
# 2  TRUE FALSE FALSE
# 3 FALSE FALSE FALSE

你能详细解释一下“普通名字”是什么意思吗?你是说两个条目之间?你能解释一下期望的结果是什么吗?@RomanLuštrik:嗨,我更新了帖子。我不确定确切的最终结果,只需像我在帖子中所说的那样在绘图中显示即可。如果您将数据重新格式化为以下格式,您的生活会更轻松:
df%>%mutate(names=strsplit(names,“|”,fixed=TRUE))%%>%tidyr::unnest(names)
您能详细说明一下“普通名称”是什么意思吗?你是说两个条目之间?你能解释一下期望的结果是什么吗?@RomanLuštrik:嗨,我更新了帖子。我不确定确切的最终结果,只需要像我在文章中所说的那样在plot中显示即可。如果您将数据重新格式化为:
df%>%mutate(names=strsplit(names,“|”,fixed=TRUE))%%>%tidyr::unest(names)
,那么我如何在plot中绘制公共名称与ID,在y轴中,我想显示名称,而不是假/真值。好的,您能更清楚地解释一下吗?在x轴上我们有ID。y轴呢?它应该包含所有可能的名称吗?如果是这样,每个单元格都应该描述该名称是否存在于相应的id中,同时是否与任何其他id相同?在x轴上我们有id,y轴将只包含公共名称。因此,在我们的示例中,x轴将包含id 1和2,y轴将包含Nick N。我希望这是清楚的,谢谢!对不起,你的解释不清楚。您描述了x轴上的两个点和y轴上的一个点。如何显示它们已连接(具有通用名称)?那么,其他几点呢。当三个ID都有共同的名称,而这些名称又不同时,您能描述一个图表吗?例如,1与3有共同的
Nik
,3与2有共同的'Ben',1与2有共同的'George'。那么我如何绘制共同的名称与ID?在绘图中,在y轴中,我想显示名称,而不是假/真值,你能更清楚地解释一下吗?在x轴上我们有ID。y轴呢?它应该包含所有可能的名称吗?如果是这样,每个单元格都应该描述该名称是否存在于相应的id中,同时是否与任何其他id相同?在x轴上我们有id,y轴将只包含公共名称。因此,在我们的示例中,x轴将包含id 1和2,y轴将包含Nick N。我希望这是清楚的,谢谢!对不起,你的解释不清楚。您描述了x轴上的两个点和y轴上的一个点。如何显示它们已连接(具有通用名称)?那么,其他几点呢。当三个ID都有共同的名称,而这些名称又不同时,您能描述一个图表吗?例如,1与3有共同的
Nik
,3与2有共同的'Ben',1与2有共同的'George'?
library(reshape2)
ggplot(melt(res == 1), aes(Var1,Var2, fill=value)) +
    geom_raster() +
    scale_fill_discrete() +
    xlab("id") + ylab("id")