首页 > 解决方案 > 渲染 tibble 的 data.frame 列

问题描述

我想创建一个data.frame,其中的列是data.frame。为了正确格式化这个列,我定义了一个类(称为 idx)并为它提供了一个格式化方法。如果我首先创建一个普通的data.frame(这里有两列)然后添加这个列(结构保持不变,即长度为3),它会起作用。当我将我的data.frame强制为tibble时,结构被保留,但是data.frame的渲染丢失了(data.frame列被渲染为两个普通系列)

我已阅读 tibble 包的“扩展 tibble”小插图,并尝试使用所描述的支柱功能

id = c("Alabama", "Alabama", "Kentucky")
year = c(1998, 1999, 1998)
gdp = c(4.5, 3.2, 1.4)
unemp = c(1, 2, 8)

idx <- function(id, time) 
   structure(data.frame(id, time, stringsAsFactors = FALSE),
                                    class = c("idx", "data.frame"))
format.idx <- function(x, ...)
    paste(substr(x[[1]], 1, 2),
          substr(x[[2]], nchar(x[[2]]) - 1,
                 nchar(x[[2]])), sep = ":")

z <- data.frame(gdp, unemp, idy = idx(id, year))
z
#>   gdp unemp   idy.id idy.time
#> 1 4.5     1  Alabama     1998
#> 2 3.2     2  Alabama     1999
#> 3 1.4     8 Kentucky     1998
names(z)
#> [1] "gdp"      "unemp"    "idy.id"   "idy.time"

# This doesn't work, but it does if I add idy to an existing
# data.frame

z <- data.frame(gdp, unemp)
z$idy <- idx(id, year)
z
#>   gdp unemp   idy
#> 1 4.5     1 Al:98
#> 2 3.2     2 Al:99
#> 3 1.4     8 Ke:98
names(z)
#> [1] "gdp"   "unemp" "idy"
z$idy
#>         id time
#> 1  Alabama 1998
#> 2  Alabama 1999
#> 3 Kentucky 1998
z$idy$id
#> [1] "Alabama"  "Alabama"  "Kentucky"

# Coercing to a tibble, I get :

library("tibble")
zt <- as_tibble(z)
zt
#> # A tibble: 3 x 3
#>     gdp unemp idy$id   $time
#>   <dbl> <dbl> <chr>    <dbl>
#> 1   4.5     1 Alabama   1998
#> 2   3.2     2 Alabama   1999
#> 3   1.4     8 Kentucky  1998
names(zt)
#> [1] "gdp"   "unemp" "idy"
zt$idy
#>         id time
#> 1  Alabama 1998
#> 2  Alabama 1999
#> 3 Kentucky 1998
z$idy$id
#> [1] "Alabama"  "Alabama"  "Kentucky"

reprex 包(v0.3.0)于 2019 年 9 月 5 日创建

我仍然无法获得 data.frame 列的所需渲染

标签: rdataframetibble

解决方案


推荐阅读