我想创建一个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列呈现