Повторяющиеся элементы в списке имеют длину, равную количеству элементов во втором списке - PullRequest
1 голос
/ 08 марта 2019

Я использую rvest для удаления комментариев некоторых постов в блоге и названия статьи / блога, к которому принадлежат комментарии. Сама очистка работала очень хорошо, но теперь я хотел бы назначить заголовок поста в блоге и комментарии для одного фрейма данных. Конечно, большинство сообщений в блоге имеют несколько комментариев, поэтому оно должно выглядеть так:

title_of_articleA     comment1
title_of_articleA     comment2
title_of_articleA     comment3
title_of_articleA     comment4
title_of_articleB     comment1
title_of_articleB     comment2

По сути, чтобы позже было легко увидеть, какие комментарии к какому посту принадлежат.

Однако моя проблема в том, что у меня в настоящее время есть два списка (один для заголовков, другой для комментариев) различной длины. Прежде чем я смогу использовать unlist () и объединить их, мне, таким образом, нужно как-то продублировать элементы каждого подсписка A, чтобы соответствовать количеству элементов в связанном подсписке B.

listA<-list("title_of_article 1", "title of article 2")
listB<-list(c("comment 1" ,"comment 2", "comment 3", "comment 4"), c("comment 1", "comment2"))

Я могу использовать sapply (listB, length) для получения индикаторов того, сколько элементов мне нужно, но как я могу использовать эту информацию, чтобы сказать ListA, что она соответственно дублирует свои элементы?

Ответы [ 3 ]

3 голосов
/ 08 марта 2019

Вот вариант с использованием tidyverse

library(tidyverse)
set_names(listB, listA) %>% 
      enframe %>% 
      unnest
# A tibble: 6 x 2
#  name               value    
#  <chr>              <chr>    
#1 title_of_article 1 comment 1
#2 title_of_article 1 comment 2
#3 title_of_article 1 comment 3
#4 title_of_article 1 comment 4
#5 title of article 2 comment 1
#6 title of article 2 comment 2
1 голос
/ 08 марта 2019

Вот еще одна идея, использующая mapply,

do.call(rbind, mapply(cbind, listA, listB))
#     [,1]                 [,2]       
#[1,] "title_of_article 1" "comment 1"
#[2,] "title_of_article 1" "comment 2"
#[3,] "title_of_article 1" "comment 3"
#[4,] "title_of_article 1" "comment 4"
#[5,] "title of article 2" "comment 1"
#[6,] "title of article 2" "comment 2"
1 голос
/ 08 марта 2019

Установите имена от listB до unlist(listA), а затем stack результат

stack(setNames(listB, unlist(listA)))
#     values                ind
#1 comment 1 title_of_article 1
#2 comment 2 title_of_article 1
#3 comment 3 title_of_article 1
#4 comment 4 title_of_article 1
#5 comment 1 title of article 2
#6 comment 2 title of article 2

данные

listA <- list("title_of_article 1", "title of article 2")
listB <- list(c("comment 1" , "comment 2", "comment 3", "comment 4"), c("comment 1", "comment 2"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...