![](/img/trans.png)
[英]How to transform a tibble from one column to two columns with repeated observations
[英]Transform a list column in a tibble to multiple columns after using enframe from {tibble}
我有以下清單
my_list <- list(`3920_0` = structure(c(623700, 96400), .Dim = 1:2, .Dimnames = list("1", c("X", "Y"))),
`3864_0` = structure(c(665100, 167400), .Dim = 1:2, .Dimnames = list("1", c("X", "Y"))),
`1948_1` = structure(c(589800, 97900), .Dim = 1:2, .Dimnames = list("1", c("X", "Y"))))
看起來如下
$`3920_0`
X Y
1 623700 96400
$`3864_0`
X Y
1 665100 167400
$`1948_1`
X Y
1 589800 97900
當我使用enframe
我得到以下信息
# A tibble: 3 x 2
name value
<chr> <list>
1 3920_0 <dbl[,2] [1 x 2]>
2 3864_0 <dbl[,2] [1 x 2]>
3 1948_1 <dbl[,2] [1 x 2]>
這幾乎就是我想要的,但是我想將“值”列中的列表“拆分”為兩列“X”和“Y”。
或者,是否有更好的解決方案來實現沒有 enframe() 的決賽桌?
您可以在unnest_wider
后使用enframe
:
my_list %>%
tibble::enframe() %>%
tidyr::unnest_wider(value, names_repair = ~c('name','x', 'y'))
# name x y
# <chr> <dbl> <dbl>
#1 3920_0 623700 96400
#2 3864_0 665100 167400
#3 1948_1 589800 97900
如果你想在沒有enframe
情況下做到這enframe
,一個類似於@Sotos 的解決方案使用purrr::map_df
purrr::map_df(my_list, as.data.frame,.id = 'name')
在綁定時將數據框放在列表中有助於輸出結構。 所以,
dplyr::bind_rows(lapply(my_list, data.frame), .id = 'id')
# id X Y
#1...1 3920_0 623700 96400
#1...2 3864_0 665100 167400
#1...3 1948_1 589800 97900
使用rbindlist
另一種選擇:
library(data.table)
rbindlist(lapply(my_list, data.frame), idcol = 'name')
name X Y
1: 3920_0 623700 96400
2: 3864_0 665100 167400
3: 1948_1 589800 97900
我們也可以轉換為tibble
並將它們綁定在一起
library(purrr)
library(tibble)
map_dfr(my_list, as_tibble, .id = 'name')
# A tibble: 3 x 3
# name X Y
# <chr> <dbl> <dbl>
#1 3920_0 623700 96400
#2 3864_0 665100 167400
#3 1948_1 589800 97900
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.