我有很多字符向量,看起来像这样:
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
答案 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)