R取消列出时获取列表名称

时间:2018-07-14 05:08:33

标签: r list data.table

我有很多字符向量,看起来像这样:

List of 53095
 $ 30875  : chr [1:10] "<h2 class=\"buildings-page-title buildings- ...
 $ 30876  : chr [1:10] "<h2 class=\"buildings-page-title buildings- ...

我想将列表创建到data.table中,其中一列显示所有原始数据(unlist),然后还添加另一列,其中包含原始列表名称(但仅第一个元素)不是列表的第二个元素。

例如:

test<-list("30875"=c("hello", "world", "!"), 
           "30876"=c("Nice","to","meet","you"))

# I could try something like this.

result<-data.table(A=unlist(test), B=names(unlist(test, use.names=T)))
> print(result)
   A      B
1: hello 308751
2: world 308752
3:     ! 308753
4:  Nice 308761
5:    to 308762
6:  meet 308763
7:   you 308764

我想要类似上面的内容,但在列表中的特定元素B列中没有最后一位数字。 (因此,从[[i]][j]开始,我只需要[[i]]部分。) 在像我一样创建东西之后,不必弄乱列B中的字符串,有没有办法从头开始获得想要的结果?

所需结果

   A      B
1: hello 30875
2: world 30875
3:     ! 30875
4:  Nice 30876
5:    to 30876
6:  meet 30876
7:   you 30876

2 个答案:

答案 0 :(得分:3)

我们可以将at java.util.ArrayList.get(ArrayList.java:411) at com.kavyabarnadhyahazarika.quarterallotmentapp.view$1.onClick(view.java:177) rep一起使用,在这里我们根据列表中的元素数重复列表的名称。

lengths

将其放入rep(names(test), lengths(test)) #[1] "30875" "30875" "30875" "30876" "30876" "30876" "30876"

data.table

答案 1 :(得分:2)

另一个选项是stack

library(data.table)
setnames(setDT(stack(test)), c('A', 'B'))[]
#      A     B
#1: hello 30875
#2: world 30875
#3:     ! 30875
#4:  Nice 30876
#5:    to 30876
#6:  meet 30876
#7:   you 30876

或使用tidyverse

library(tidyverse)
map_df(test, enframe, value = 'A', .id = 'B') %>% 
            select(A, B)