R - 堆栈或融化数据帧

问题描述

我需要对推文进行网络分析并获得以下数据框:

 # A tibble: 10 x 3
   Screen.name    party  mentions                                                               
    <chr>          <chr>  <chr>                                                                  
 1 @_A_K_K_       CDU    ""                                                                     
 2 @A_Gloeckner   SPD    "@MartinSchulz @MartinSchulz @MartinSchulz @ManuelaSchwesig @sigmargab~
 3 @a_grotheer    SPD    "@NSC_CPMR @SouthendRNLI @weserkurier @werderbremen @ribasdiego10 @boe~
 4 @A_Schillhane~ GRUENE "@BA_Mitte_Berlin @nytimes @nutellaberliner @Flauschpolizei @A_Schillh~
 5 @Achim_P       SPD    "@spdmilk @Achim_P @jusosowl @Franzmannmarcel @KorkmazGT @c_kampmann @~
 6 @AdolfKessel1  CDU    "@CDUFraktionRLP @AdolfKessel1"                                        
 7 @AfDLindemann  AfD    "@welt @BVG_Kampagne @SeeroiberJenny @spdde @Afdberlin @spdberlin @See~
 8 @AfdMatzke     AfD    "@APVogt @AfdMatzkeNicht @Leyla_eV @COMPACTMagazin @BjoernHoecke @Birg~
 9 @agnieszka_mdb GRUENE "@HelgeBoettcher @agnieszka_mdb @MV_AM @agnieszka_mdb @larscastellucci~
10 @alex_gauland  AfD    "@RT_Dyck @extra3 @RT_Deutsch @_Herzblatt_ @m_shalva @FraukePetry @Meu~

为了继续我的网络分析,我需要我的 Dataframe 如下所示:

    Screen.name    mentions            party
  1 @A_Gloeckner   @MartinSchulz       SPD
  2 @A_Gloeckner   @MartinSchulz       SPD
  3 @A_Gloeckner   @MartinSchulz       SPD
  4 @A_Gloeckner   @ManuelaSchwesig    SPD
  5 @A_Gloeckner   @sigmargabriel      SPD
  6 @a_grotheer    @NSC_CPMR           SPD
  7 @a_grotheer    @SouthendRNLI       SPD
  8 @a_grotheer    @weserkurier        SPD
  9 @a_grotheer    @werderbremen       SPD
     ...           ...

我尝试熔化或堆叠数据框,但这没有用:

test <- ds %>%
  select(Screen.name,mentions)
test <- melt(test,id=c("Screen.name"))
# other approach
test <- stack(ds[,c(1,3)])

这两种方法都给了我错误输出一个额外的好处是在此处包括特定的“派对”。我也愿意接受其他网络分析解决方案,但这种数据框似乎有助于从中创建图表。

预先感谢您的帮助!

解决方法

另一个选择,如果你想坚持 tidyverse,你可以使用 str_split 中的 stringr 将字符串列拆分为出现的字符向量(新列成为列表列),并且然后使用 unnest_longer 取消嵌套此结果。

df %>% 
  rowwise() %>% 
  mutate(mentionsplit = str_split(mentions,'\\s')) %>% 
  unnest_longer(mentionsplit)
,

对我有用的一个解决方案是:

s <- strsplit(ds$mentions,split = " ")
df <- data.frame(Screen.name = rep(ds$Screen.name,sapply(s,length)),mentions = unlist(s))