R - 堆栈或熔化数据框
R - stack or melt dataframe
我需要对推文进行网络分析并得到以下数据框:
# 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)])
两种方法都给我错误的输出。
一个额外的好处是在这里包括特定的“派对”。我在这里也对其他网络分析解决方案持开放态度,但这种数据框似乎有助于从中创建图表。
在此先感谢您的帮助!
一个对我有用的解决方案是:
s <- strsplit(ds$mentions, split = " ")
df <- data.frame(Screen.name = rep(ds$Screen.name, sapply(s, length)),mentions = unlist(s))
另一种选择,如果你想坚持使用 tidyverse,你可以使用 stringr
中的 str_split
将字符串列拆分为出现的字符向量(新列成为列表列) , 然后使用 unnest_longer
取消嵌套此结果。
df %>%
rowwise() %>%
mutate(mentionsplit = str_split(mentions, '\s')) %>%
unnest_longer(mentionsplit)
我需要对推文进行网络分析并得到以下数据框:
# 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)])
两种方法都给我错误的输出。 一个额外的好处是在这里包括特定的“派对”。我在这里也对其他网络分析解决方案持开放态度,但这种数据框似乎有助于从中创建图表。
在此先感谢您的帮助!
一个对我有用的解决方案是:
s <- strsplit(ds$mentions, split = " ")
df <- data.frame(Screen.name = rep(ds$Screen.name, sapply(s, length)),mentions = unlist(s))
另一种选择,如果你想坚持使用 tidyverse,你可以使用 stringr
中的 str_split
将字符串列拆分为出现的字符向量(新列成为列表列) , 然后使用 unnest_longer
取消嵌套此结果。
df %>%
rowwise() %>%
mutate(mentionsplit = str_split(mentions, '\s')) %>%
unnest_longer(mentionsplit)