我正在使用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相应地复制它的项目?
这是一个使用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
将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"))
这是使用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"