通过 id 加入 R 中的两个列表
Join two list in R by id
我有这样的东西:
ids <- c("A","B","C")
ls <- list()
ls[[1]] <- c("aa","aaa")
ls[[2]] <- c("bb","bbb")
ls[[3]] <- c("cc","ccc")
我想获得类似下一个的东西:
data.frame(ids = c("A","A","B","B","C","C"), ls = c("aa","aaa","bb","bbb","cc","ccc"))
你知道怎么做吗?
ls 的每个元素的长度可以变化,但 ids 和 ls 的长度是相同的。
Dplyr 和 purrr(tidyverse) 对我来说没问题
最佳
像这样?
library(tidyr)
gather(data.frame(setNames(ls, ids)), ids, ls)
ids ls
1 A aa
2 A aaa
3 B bb
4 B bbb
5 C cc
6 C ccc
其工作方式如下:首先,我将名称分配给列表:
named_list <- setNames(ls, ids)
named_list
$A
[1] "aa" "aaa"
$B
[1] "bb" "bbb"
$C
[1] "cc" "ccc"
然后将其转换为数据帧:
test_df <- data.frame(named_list)
test_df
A B C
1 aa bb cc
2 aaa bbb ccc
然后我使用 tidyr::gather
或 reshape2::melt
重塑它
gather(test_df)
key value
1 A aa
2 A aaa
3 B bb
4 B bbb
5 C cc
6 C ccc
要提供您的列名,只需添加 ids
和 ls
即可。
最简单的基本 R 方法是像这样使用 unlist
和 rep
:
data.frame(ids=rep(ids, lengths(ls)), ls=unlist(ls))
ids ls
1 A aa
2 A aaa
3 B bb
4 B bbb
5 C cc
6 C ccc
rep
重复不同长度的 id,每个列表元素的长度由 lengths
计算。然后将嵌套列表转换为具有 unlist
.
的向量
这里有一个选项base R
setNames(stack(setNames(ls, LETTERS[1:3]))[2:1], c("ids", "ls"))
# ids ls
#1 A aa
#2 A aaa
#3 B bb
#4 B bbb
#5 C cc
#6 C ccc
我有这样的东西:
ids <- c("A","B","C")
ls <- list()
ls[[1]] <- c("aa","aaa")
ls[[2]] <- c("bb","bbb")
ls[[3]] <- c("cc","ccc")
我想获得类似下一个的东西:
data.frame(ids = c("A","A","B","B","C","C"), ls = c("aa","aaa","bb","bbb","cc","ccc"))
你知道怎么做吗? ls 的每个元素的长度可以变化,但 ids 和 ls 的长度是相同的。 Dplyr 和 purrr(tidyverse) 对我来说没问题
最佳
像这样?
library(tidyr)
gather(data.frame(setNames(ls, ids)), ids, ls)
ids ls
1 A aa
2 A aaa
3 B bb
4 B bbb
5 C cc
6 C ccc
其工作方式如下:首先,我将名称分配给列表:
named_list <- setNames(ls, ids)
named_list
$A
[1] "aa" "aaa"
$B
[1] "bb" "bbb"
$C
[1] "cc" "ccc"
然后将其转换为数据帧:
test_df <- data.frame(named_list)
test_df
A B C
1 aa bb cc
2 aaa bbb ccc
然后我使用 tidyr::gather
或 reshape2::melt
gather(test_df)
key value
1 A aa
2 A aaa
3 B bb
4 B bbb
5 C cc
6 C ccc
要提供您的列名,只需添加 ids
和 ls
即可。
最简单的基本 R 方法是像这样使用 unlist
和 rep
:
data.frame(ids=rep(ids, lengths(ls)), ls=unlist(ls))
ids ls
1 A aa
2 A aaa
3 B bb
4 B bbb
5 C cc
6 C ccc
rep
重复不同长度的 id,每个列表元素的长度由 lengths
计算。然后将嵌套列表转换为具有 unlist
.
这里有一个选项base R
setNames(stack(setNames(ls, LETTERS[1:3]))[2:1], c("ids", "ls"))
# ids ls
#1 A aa
#2 A aaa
#3 B bb
#4 B bbb
#5 C cc
#6 C ccc