渲染小标题的data.frame列

时间:2019-09-05 07:58:29

标签: r dataframe tibble

我想创建一个data.frame,其中的一列是data.frame。为了正确格式化该列,我定义了一个类(称为idx)并为其提供了格式化方法。如果我先创建一个普通的data.frame(此处有两列),然后添加此列(保留结构,即长度为3),则此方法有效。当我将data.frame强制更改为小标题时,将保留其结构,但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 package(v0.3.0)于2019-09-05创建

我仍然无法获得所需的data.frame列呈现

0 个答案:

没有答案