`dplyr::bind_rows` 在组合列出的小标题时不起作用
`dplyr::bind_rows` not working while combining listed tibbles
如下所示,我想通过将行堆叠在一起来将四个数据帧合并为一个数据帧。列名相同,所以不确定为什么这不起作用。
set.seed(123)
library(quantreg)
#> Loading required package: SparseM
#>
#> Attaching package: 'SparseM'
#> The following object is masked from 'package:base':
#>
#> backsolve
library(tidyverse)
# crq example with left censoring
n <- 200
x <-rnorm(n)
y <- 5 + x + rnorm(n)
c <- 4 + x + rnorm(n)
d <- (y > c)
# model
f <- crq(survival::Surv(pmax(y,c), d, type = "left") ~ x, method = "Portnoy")
# converting list to tibbles
(ls_f <- purrr::map(summary(f), tibble::as_tibble))
#> [[1]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.2 4.27 4.15 4.43 0.0701 60.9
#> 2 0.2 0.975 0.755 1.41 0.166 5.86
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
#>
#> [[2]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.4 4.85 4.68 5.04 0.0922 52.6
#> 2 0.4 0.926 0.774 1.05 0.0712 13.0
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
#>
#> [[3]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.6 5.22 5.07 5.53 0.117 44.4
#> 2 0.6 0.980 0.774 1.18 0.104 9.47
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
#>
#> [[4]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.8 5.91 5.66 6.16 0.127 46.4
#> 2 0.8 0.974 0.775 1.11 0.0846 11.5
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
# combining the dataframes from list into a single dataframe
dplyr::bind_rows(ls_f, .id = "id")
#> Error: Argument 2 must be length 2, not 12
由 reprex package (v0.3.0)
于 2019-12-29 创建
当您 运行 str(lsf[[1]]
时,您会发现并非所有列的长度都相同。
> str(ls_f[[1]])
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 6 variables:
$ tau : num 0.2 0.2
$ coefficients: num [1:2, 1:6] 4.267 0.975 4.152 0.755 4.426 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr "Value" "Lower Bd" "Upper Bd" "Std Error" ...
$ NAs : int 0 0
$ cov : num [1:2, 1:2] 0.00619 -0.00101 -0.00101 0.02907
$ Brep : int 100 100
$ bmethod : chr "jack" "jack"
问题列是 coefficients
和 cov
。您要做的是将列表中的项目转换为所有列中行数相等的数据框。
你可以试试这个:
> map_dfr(ls_f, ~matrix(.x%>%unlist(), nrow = 2, byrow=FALSE)%>%as.data.frame(),
.id = 'id')%>%setNames(., c("id","tau","Coefficients","Lower Bd","Upper
Bd","Std Error","T value", "Pr(>|t|)","NAs","Cov.1","Cov.2","Brep","bmethod"))
id tau Coefficients Lower Bd
1 1 0.2 4.26723731325802 4.15151386918715
2 1 0.2 0.975337362554836 0.755135344862367
3 2 0.4 4.84960828201606 4.6759841894663
4 2 0.4 0.926379209201144 0.774080446159287
5 3 0.6 5.21842672746996 5.07393944600602
6 3 0.6 0.980382470437977 0.773903350749942
7 4 0.8 5.91300846399214 5.66442963978162
8 4 0.8 0.973822317385054 0.77490538175223
Upper Bd Std Error T value
1 4.42630114851379 0.0701000838520821 60.8734979869968
2 1.40758057160874 0.166443167296128 5.85988225530196
3 5.03757343137807 0.0922438485512842 52.573785224495
4 1.05322615510482 0.0712119485733918 13.0087608576868
5 5.53451872047045 0.117496871906172 44.4133247363144
6 1.17991901434745 0.103577327644822 9.46522267691451
7 6.16404796355733 0.127455996058252 46.3925483842258
8 1.10644239537846 0.0845773229103572 11.5139884294659
Pr(>|t|) NAs Cov.1
1 0 0 0.00619181512900162
2 4.63195481970047e-09 0 -0.00100787735092982
3 0 0 0.00993640997874621
4 0 0 -0.00191068720356238
5 0 0 0.0115580325035132
6 0 0 -0.00228295313931709
7 0 0 0.0146462605811626
8 0 0 0.00236162295400874
Cov.2 Brep bmethod
1 -0.00100787735092982 100 jack
2 0.0290671203153015 100 jack
3 -0.00191068720356238 100 jack
4 0.00883546932718665 100 jack
5 -0.00228295313931709 100 jack
6 0.0154261294271654 100 jack
7 0.00236162295400874 100 jack
8 0.0104356503143278 100 jack
There were 45 warnings (use warnings() to see them)
警告仅来自 dplyr
的 bind_rows
强制字符和因子向量的绑定(map_dfr
使用 dplyr'
s bind_rows
函数) .您也可以使用 as.tibble()
代替 as.data.frame()
如下所示,我想通过将行堆叠在一起来将四个数据帧合并为一个数据帧。列名相同,所以不确定为什么这不起作用。
set.seed(123)
library(quantreg)
#> Loading required package: SparseM
#>
#> Attaching package: 'SparseM'
#> The following object is masked from 'package:base':
#>
#> backsolve
library(tidyverse)
# crq example with left censoring
n <- 200
x <-rnorm(n)
y <- 5 + x + rnorm(n)
c <- 4 + x + rnorm(n)
d <- (y > c)
# model
f <- crq(survival::Surv(pmax(y,c), d, type = "left") ~ x, method = "Portnoy")
# converting list to tibbles
(ls_f <- purrr::map(summary(f), tibble::as_tibble))
#> [[1]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.2 4.27 4.15 4.43 0.0701 60.9
#> 2 0.2 0.975 0.755 1.41 0.166 5.86
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
#>
#> [[2]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.4 4.85 4.68 5.04 0.0922 52.6
#> 2 0.4 0.926 0.774 1.05 0.0712 13.0
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
#>
#> [[3]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.6 5.22 5.07 5.53 0.117 44.4
#> 2 0.6 0.980 0.774 1.18 0.104 9.47
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
#>
#> [[4]]
#> # A tibble: 2 x 6
#> tau coefficients[,"~ [,"Lower Bd"] [,"Upper Bd"] [,"Std Error"] [,"T Value"]
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.8 5.91 5.66 6.16 0.127 46.4
#> 2 0.8 0.974 0.775 1.11 0.0846 11.5
#> # ... with 6 more variables: [,"Pr(>|t|)"] <dbl>, NAs <int>, cov[,1] <dbl>,
#> # [,2] <dbl>, Brep <int>, bmethod <chr>
# combining the dataframes from list into a single dataframe
dplyr::bind_rows(ls_f, .id = "id")
#> Error: Argument 2 must be length 2, not 12
由 reprex package (v0.3.0)
于 2019-12-29 创建当您 运行 str(lsf[[1]]
时,您会发现并非所有列的长度都相同。
> str(ls_f[[1]])
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 6 variables:
$ tau : num 0.2 0.2
$ coefficients: num [1:2, 1:6] 4.267 0.975 4.152 0.755 4.426 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr "Value" "Lower Bd" "Upper Bd" "Std Error" ...
$ NAs : int 0 0
$ cov : num [1:2, 1:2] 0.00619 -0.00101 -0.00101 0.02907
$ Brep : int 100 100
$ bmethod : chr "jack" "jack"
问题列是 coefficients
和 cov
。您要做的是将列表中的项目转换为所有列中行数相等的数据框。
你可以试试这个:
> map_dfr(ls_f, ~matrix(.x%>%unlist(), nrow = 2, byrow=FALSE)%>%as.data.frame(),
.id = 'id')%>%setNames(., c("id","tau","Coefficients","Lower Bd","Upper
Bd","Std Error","T value", "Pr(>|t|)","NAs","Cov.1","Cov.2","Brep","bmethod"))
id tau Coefficients Lower Bd
1 1 0.2 4.26723731325802 4.15151386918715
2 1 0.2 0.975337362554836 0.755135344862367
3 2 0.4 4.84960828201606 4.6759841894663
4 2 0.4 0.926379209201144 0.774080446159287
5 3 0.6 5.21842672746996 5.07393944600602
6 3 0.6 0.980382470437977 0.773903350749942
7 4 0.8 5.91300846399214 5.66442963978162
8 4 0.8 0.973822317385054 0.77490538175223
Upper Bd Std Error T value
1 4.42630114851379 0.0701000838520821 60.8734979869968
2 1.40758057160874 0.166443167296128 5.85988225530196
3 5.03757343137807 0.0922438485512842 52.573785224495
4 1.05322615510482 0.0712119485733918 13.0087608576868
5 5.53451872047045 0.117496871906172 44.4133247363144
6 1.17991901434745 0.103577327644822 9.46522267691451
7 6.16404796355733 0.127455996058252 46.3925483842258
8 1.10644239537846 0.0845773229103572 11.5139884294659
Pr(>|t|) NAs Cov.1
1 0 0 0.00619181512900162
2 4.63195481970047e-09 0 -0.00100787735092982
3 0 0 0.00993640997874621
4 0 0 -0.00191068720356238
5 0 0 0.0115580325035132
6 0 0 -0.00228295313931709
7 0 0 0.0146462605811626
8 0 0 0.00236162295400874
Cov.2 Brep bmethod
1 -0.00100787735092982 100 jack
2 0.0290671203153015 100 jack
3 -0.00191068720356238 100 jack
4 0.00883546932718665 100 jack
5 -0.00228295313931709 100 jack
6 0.0154261294271654 100 jack
7 0.00236162295400874 100 jack
8 0.0104356503143278 100 jack
There were 45 warnings (use warnings() to see them)
警告仅来自 dplyr
的 bind_rows
强制字符和因子向量的绑定(map_dfr
使用 dplyr'
s bind_rows
函数) .您也可以使用 as.tibble()
代替 as.data.frame()