R错误“由于类型不兼容(列表/列表),无法加入…”

问题描述 投票:1回答:2

我知道有人问过类似错误代码的问题,但到目前为止我们的问题还没有得到答案。

问题:通过以列表为内容的列将数据框自身联接起来。

DATA

bsp_fn <- c("1","2","3","4","5")
bsp_liste1 <- list(list("a","b","c"),list("a","b"),list("a","c"),list("a","b","c"),list("b","c"))
bsp_df <- tibble(bsp_fn,bsp_liste1)

问题

bsp_df %>% inner_join(bsp_df,by="bsp_liste1") 

Error: Can't join on'bsp_liste1' x 'bsp_liste1' because of incompatible types (list / list)

问题

我可以“通过比较”加入列表吗?由于列表“ a”,“ b”,“ c”出现了两次,因此我希望这里有一个匹配项。

r dataframe self-join
2个回答
0
投票

[我认为您不能join将列表用作by,我认为by必须是原子数据结构。但是,这可行:

bsp_df %>%
  mutate(ID = paste0(unlist(bsp_liste1), collapse="")) %>% 
  inner_join(bsp_df %>% mutate(ID = paste0(unlist(bsp_liste1), collapse="")),by="ID")

0
投票

不是答案,而是评论(由于信誉不足而无法评论)

我认为@Sedir的意思是:

bsp_df %>%
     group_by(bsp_fn) %>% 
     mutate(ID = paste0(unlist(bsp_liste1), collapse="")) %>% 
     inner_join(bsp_df %>% group_by(bsp_fn) %>% mutate(ID = paste0(unlist(bsp_liste1), collapse="")),by="ID")

与1-1和1-4、2-2、3-3、4-1、4-4、5-5匹配。但是,它仍然只能以“正确”的顺序(即“ abc”)运行; “ cba”不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.