#r #dataframe #network-analysis
Вопрос:
мне нужно провести сетевой анализ твитов и получить следующий кадр данных:
# 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~
Чтобы продолжить мой сетевой анализ, мне нужно, чтобы мой фрейм данных выглядел следующим образом:
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)])
Оба подхода дают мне неверный результат.
Бонусом также было бы включить сюда конкретную «вечеринку». Я также открыт для другого решения для сетевого анализа здесь, но этот вид фрейма данных, по-видимому, полезен для создания графика на его основе.
Заранее спасибо за вашу помощь!
Комментарии:
1.
melt
иstack
предназначены для объединения нескольких столбцов значений в один столбец значений (например, от широкого до длинного формата), иstack
наоборот. Ваши данные содержат одинstring
столбец, который вы хотитеsplit
объединить в строки. Это не стек и не расплав.
Ответ №1:
Другой вариант, если вы хотите придерживаться tidyverse, вы можете использовать str_split
from stringr
для разделения столбца строк на векторы символов вхождений (новый столбец становится столбцом списка), а затем использовать unnest_longer
для отмены этого результата.
df %>%
rowwise() %>%
mutate(mentionsplit = str_split(mentions, '\s')) %>%
unnest_longer(mentionsplit)
Комментарии:
1. Это тоже работает! Знаете ли вы решение, как также добавить столбец со значением столбца «участник»? (Я отредактировал вопрос)
Ответ №2:
Одним из решений, которое сработало для меня, было:
s <- strsplit(ds$mentions, split = " ")
df <- data.frame(Screen.name = rep(ds$Screen.name, sapply(s, length)),mentions = unlist(s))