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

问题描述 投票:1回答:3

我正在使用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相应地复制它的项目?

r list
3个回答
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
投票

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"))

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"
© www.soinside.com 2019 - 2024. All rights reserved.