列表中的重复元素与第二个列表中的元素具有相同的长度

时间:2019-03-08 10:40:26

标签: r list

我正在使用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 个答案:

答案 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"