R 在嵌套列中保留原始类型“tibble”
我非常喜欢R 在嵌套列中保留原始类型“tibble”,r,nested,tidyr,tibble,R,Nested,Tidyr,Tibble,我非常喜欢v1.0.0附带的新tidyr界面 然而,由于tidyverse或多或少以tibble为中心,我有点困惑,嵌套列似乎是data.frames的列表-即使最初的数据是tibble(在这种情况下,我希望在嵌套列中有一个tibbles列表): 库(magrittr) df#A tibble:3 x 3 #>id x y #> #> 1 1 10 20 #> 2 1 100 200 #> 3 2 1 2 df%>%tidyr
v1.0.0
附带的新tidyr
界面
然而,由于tidyverse或多或少以tibble
为中心,我有点困惑,嵌套列似乎是data.frame
s的列表-即使最初的数据是tibble
(在这种情况下,我希望在嵌套列中有一个tibble
s列表):
库(magrittr)
df#A tibble:3 x 3
#>id x y
#>
#> 1 1 10 20
#> 2 1 100 200
#> 3 2 1 2
df%>%tidyr::nest_legacy(-id)
#>#tibble:2x2
#>id数据
#>
#> 1 1
#> 2 2
df%>%tidyr::nest(数据=-id)
#>#tibble:2x2
#>id数据
#>
#>11[2x2]
#>2[1 x 2]
有没有办法得到与
tidyr::nest_legacy()
给我/给我的完全相同的结果?使用nest
与nest_legacy
时,数据列的类别似乎有所不同
library(tidyr)
library(dplyr)
df <- tibble::tribble(
~id, ~x, ~y,
1, 10, 20,
1, 100, 200,
2, 1, 2
)
df
# A tibble: 3 x 3
# id x y
# <dbl> <dbl> <dbl>
#1 1 10 20
#2 1 100 200
#3 2 1 2
检查数据列的类
class(test1[[2]])
[1] "vctrs_list_of" "vctrs_vctr"
class(test2[[2]])
[1] "list"
在数据列上使用as.list
将产生与nest\u legacy
test3 <- df %>% nest(data = -id) %>% mutate_at(vars(data), ~as.list(.))
test3
# A tibble: 2 x 2
# id data
# <dbl> <list>
#1 1 <tibble [2 x 2]>
#2 2 <tibble [1 x 2]>
identical(test2, test3)
[1] TRUE
test3%nest(data=-id)%%>%mutate_at(vars(data),~as.list()
测试3
#一个tibble:2x2
#id数据
#
#1 1
#2 2
相同(测试2、测试3)
[1] 真的
我认为df%>%group\u nest(id)
给了你想要的结果。@tmfmnk谢谢你的指针。但是仍然感觉有点混乱/不一致,因为group\u nest()
住在dplyr
而不是tidyr
而且还有df%>%dplyr::group\u by(id)%>%tidyr::nest()
这又给了我一个数据.frame
s:-/这可能会给出相同的结果:df%>%nest(data=-id)%%>%mutate\u at(vars(data),~as.list(.)
。太好了,谢谢!但我真的不明白它为什么工作,as.list()突然将一个数据.frame
变成一个tibble
?@Rappster我想他们已经是tibble
s了,就像我的回答中,如果你看df%>%nest(-id)%>%'[[['(2)%>%[['(1)%>%是tibble()
它将返回TRUE
作为。list
只是更改数据
列的类,以匹配nest\u legacy
所做的。啊,好吧,明白了。似乎tidyr
更多地使用了vctrs
。同时也是vctrs
的粉丝,但现在看到
和没有,我仍然感到困惑有关TIBLE的信息
class(test1[[2]])
[1] "vctrs_list_of" "vctrs_vctr"
class(test2[[2]])
[1] "list"
test3 <- df %>% nest(data = -id) %>% mutate_at(vars(data), ~as.list(.))
test3
# A tibble: 2 x 2
# id data
# <dbl> <list>
#1 1 <tibble [2 x 2]>
#2 2 <tibble [1 x 2]>
identical(test2, test3)
[1] TRUE