我有一個結構如下的資料框架串列:
我有一個結構如下的資料框架串列:
我有一個結構如下的資料框架。
list_example <- list(type1_a_b = data. frame(id = 1。 3, a = 1。 3, b = 4。 6),
type1_c_d = data. frame(id = 1。 5, c == 1。 5, d = 5。 9),
type2_e_f = data. frame(id = c(1。 3,4)。 e = 1。 3, f = 4。 6),
type2_g_h = data. frame(id = c(2。 3,4)。 g = 1。 3, h = 5。 7))
我也有一個資料框架型別的向量:
我有一個資料框架型別的向量。
data_types < - c("type1"/span>。 "type2")
我想按型別對資料框架進行全面連接(使用data_types向量和id列),最好是用purrr。
期望的輸出:
list(type1 = data. frame(id = 1:5,
a = c(1。 3, NA。 NA),
b = c(4。 6, NA。 NA),
c = 1:5,
d = 5:9),
type2 = data. frame(id = c(1。 4),
e = c(1。 NA。 3, 4), ,
f = c(4。 NA。 5, 6),
g = c(NA。 1。 3),
h = c(NA。 5。 7))
)
$type1
id a b c d
1 1 1 4 1 5
2 2 2 5 2 6
3 3 3 6 3 7
4 4 NA NA 4 8
5 5 NA NA 5 9
$type2
id e f g h
1 1 1 4 NA NA
2 2 NA NA 1 5
3 3 3 5 2 6
4 4 4 6 3 7
我能夠用這個帖子中的解決方案將所有的串列元素減少到一個資料框中,但是我希望以串列格式輸出,以便以后分別處理不同的資料型別。
list_example %> %
purrr:: reduce(full_join, by = "id")
id a b c d e f g h
1 1 1 4 1 5 1 4 NA NA
2 2 2 5 2 6 NA NA 1 5
3 3 3 6 3 7 2 5 2 6
4 4 NA NA 4 8 3 6 3 7
5 5 NA NA 5 9 NA NA NA NA
謝謝你!
uj5u.com熱心網友回復:
我們可以通過名字的子串進行拆分,并通過map在外層串列上回圈,并通過full_join對內部嵌套的串列進行還原
library(dplyr)
library(stringr)
library(purrr)
list_example %>%
split(str_remove(names(. ), "_. *")) %>%
map(~ reduce(. x, full_join。 by = "id") %> %
arrange(id))
輸出
$type1
id a b c d
1 1 1 4 1 5
2 2 2 5 2 6
3 3 3 6 3 7
4 4 NA NA 4 8
5 5 NA NA 5 9
$type2
id e f g h
1 1 1 4 NA NA
2 2 NA NA 1 5
3 3 2 5 2 6
4 4 3 6 3 7
或者在base R中使用merge/Reduce
lapply(split(list_example, sub("_. *", "。 names(list_example)))。
(x) Reduce((. ...)合并(. .. , all = TRUE)。 x))
輸出
$type1
id a b c d
1 1 1 4 1 5
2 2 2 5 2 6
3 3 3 6 3 7
4 4 NA NA 4 8
5 5 NA NA 5 9
$type2
id e f g h
1 1 1 4 NA NA
2 2 NA NA 1 5
3 3 2 5 2 6
4 4 3 6 3 7
uj5u.com熱心網友回復:
一個使用lapply的基礎R選項 -
nm <- names(list_example)
結果 < - lapply(data_types, function(x)
Reduce(function(p。 q) merge(p, q。 all = TRUE。 通過= 'id'),
list_example[grep(x, nm)]))
結果
#[[1]]
# id a b c d
#1 1 1 4 1 5
#2 2 2 5 2 6
#3 3 3 6 3 7
#4 4 NA NA 4 8
#5 5 NA NA 5 9
#[[2]]/span>
# id e f g h
#1 1 1 4 NA NA
#2 2 NA NA 1 5
#3 3 2 5 2 6
#4 4 3 6 3 7
如果你想給result串列命名,你可以添加。
names(result) <- data_types
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325723.html
標籤:
上一篇:在kdb中把字串轉為長字串
下一篇:我可以用這些資料制作箱線圖嗎?
