我正在使用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相应地复制其项目呢?
答案 0 :(得分:3)
这里是使用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 :(得分:1)
将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"))
答案 2 :(得分:1)
这是使用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"