Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在嵌套列中保留原始类型“tibble”_R_Nested_Tidyr_Tibble - Fatal编程技术网

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