R 同一部电影中演员的无方向组合

R 同一部电影中演员的无方向组合,r,dataframe,tidyverse,purrr,tibble,R,Dataframe,Tidyverse,Purrr,Tibble,我不确定如何描述我正在尝试的操作。我有一个数据框,有两个栏目:电影和演员。我想从这个列表中创建一个独特的两人组合列表,基于他们在一起的电影。下面的代码创建了一个我拥有的数据框示例,以及另一个我想要的结果数据框 start_data您可以使用combn…,2找到两个参与者的组合,这两个参与者可以转换为两列TIBLE,并存储在带有SUMMARE的列表列中;要获得平面数据帧,请使用unnest: 您可以使用combn…,2来查找两个参与者的组合,它们可以转换为两列TIBLE,并存储在带有SUMMA

我不确定如何描述我正在尝试的操作。我有一个数据框,有两个栏目:电影和演员。我想从这个列表中创建一个独特的两人组合列表,基于他们在一起的电影。下面的代码创建了一个我拥有的数据框示例,以及另一个我想要的结果数据框

start_data您可以使用combn…,2找到两个参与者的组合,这两个参与者可以转换为两列TIBLE,并存储在带有SUMMARE的列表列中;要获得平面数据帧,请使用unnest:

您可以使用combn…,2来查找两个参与者的组合,它们可以转换为两列TIBLE,并存储在带有SUMMARY的列表列中;要获得平面数据帧,请使用unnest:


这正是我需要的。我唯一添加的是添加filteractor1!=actor2需要移除一些案例。这可能是我的数据中的一个问题;您可以像以前一样在之后应用筛选器,也可以从combnuniqueactor 2开始删除重复项。这正是我所需要的。我唯一添加的是添加filteractor1!=actor2需要移除一些案例。这可能是我的数据中的一个问题;您可以像以前一样在之后应用过滤器,也可以像combnuniqueactor 2那样从一开始就删除重复项。这似乎和其他海报一样有效。我的错误是没有提供适当的演员样本数据。格式应为Lastname Firstname。要使您的方法正常工作,需要进行一些小的黑客攻击。您的方法的另一个问题是,您没有提到str_c来自stringr包。不过不难找到。感谢您的努力。如果您不想使用Stringr,只需将stru_c更改为paste0。这似乎和其他海报一样有效。我的错误是没有提供适当的演员样本数据。格式应为Lastname Firstname。要使您的方法正常工作,需要进行一些小的黑客攻击。您的方法的另一个问题是,您没有提到str_c来自stringr包。不过不难找到。感谢您的努力。如果您不想使用stringr,只需将stru_c更改为paste0即可
library(tidyverse)

start_data %>% 
    group_by(movie) %>% 
    summarise(acts = list(
        if(length(actor) > 1) set_names(as.tibble(t(combn(actor, 2))), c('actor1', 'actor2')) 
        else tibble()
    )) %>% 
    unnest()

# A tibble: 4 x 3
#      movie actor1 actor2
#      <chr>  <chr>  <chr>
#1 star wars   john  sarah
#2   titanic   john  billy
#3   titanic   john  sarah
#4   titanic  billy  sarah
library(tidyverse)
library(stringr)

inner_join(start_data, start_data, by = "movie") %>% 
  filter(actor.x != actor.y) %>% 
  rowwise() %>% 
  mutate(combo = str_c(min(actor.x, actor.y), "_", max(actor.x, actor.y))) %>% 
  ungroup() %>%
  select(movie, combo) %>% 
  distinct %>% 
  separate(combo, c("actor1", "actor2"))