当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R tibble tibble 构建 DataFrame 架


tibble() 构造一个数据帧。它的使用方式与 base::data.frame() 类似,但有一些显著差异:

  • 除了 data.frame 之外,返回的数据帧还具有 tbl_df 类。这允许所谓的 "tibbles" 表现出一些特殊行为,例如 enhanced printing 。 Tibbles 在 tbl_df 中有完整说明。

  • 在转换用户输入方面,tibble()base::data.frame() 惰性得多。

    • 字符向量不会被强制分解。

    • 列表列是明确预期的并且不需要特殊技巧。

    • 不修改列名称。

    • 列中的内部名称保持不变。

  • tibble() 按顺序构建列。定义列时,您可以引用之前在调用中创建的列。仅回收长度为 1 的列。

  • 如果列的计算结果为 DataFrame 或小标题,则它是嵌套或拼接的。如果它的计算结果为矩阵或数组,则它仍然分别为矩阵或数组。请参阅示例。

tibble_row() 构造一个保证占据一行的数据帧。向量列的大小必须为一,非向量列包含在列表中。

用法

tibble(
  ...,
  .rows = NULL,
  .name_repair = c("check_unique", "unique", "universal", "minimal")
)

tibble_row(
  ...,
  .name_repair = c("check_unique", "unique", "universal", "minimal")
)

参数

...

< dynamic-dots > 一组name-value 对。这些参数使用 rlang::quos() 进行处理,并支持通过 !! 取消引用和通过 !!! 取消引用拼接。使用 := 创建以点开头的列。

参数按顺序进行评估。您可以直接引用先前创建的元素或使用 .data 代词。要显式引用调用环境中的对象,请使用 !! 或 .env,例如!!.data.env$.data 用于名为 .data 的对象的特殊情况。

.rows

行数,可用于创建 0 列 tibble 或仅作为附加检查。

.name_repair

有问题的列名的处理:

  • "minimal":没有名称修复或检查,超出基本存在,

  • "unique" :确保名称唯一且不为空,

  • "check_unique" :(默认值),没有名称修复,但检查它们是 unique

  • "universal" :命名为 unique 和语法

  • 函数:应用自定义名称修复(例如,.name_repair = make.names 用于基本 R 样式的名称)。

  • purrr-style 匿名函数,请参阅rlang::as_function()

此参数作为 repair 传递到 vctrs::vec_as_names() 。有关这些条款以及用于执行这些条款的策略的更多详细信息,请参阅此处。

tibble,是类 tbl_df 对象的通俗术语。 tbl_df 对象也是一个 DataFrame ,即它具有类 data.frame

也可以看看

使用 as_tibble() 将现有对象转换为 tibble。使用 enframe() 将命名向量转换为 tibble。 vctrs::vec_as_names() 中详细介绍了名称修复。有关整洁点语义的更多详细信息,请参阅准引用,即 ... 参数的处理方式。

例子

# Unnamed arguments are named with their expression:
a <- 1:5
tibble(a, a * 2)
#> # A tibble: 5 × 2
#>       a `a * 2`
#>   <int>   <dbl>
#> 1     1       2
#> 2     2       4
#> 3     3       6
#> 4     4       8
#> 5     5      10

# Scalars (vectors of length one) are recycled:
tibble(a, b = a * 2, c = 1)
#> # A tibble: 5 × 3
#>       a     b     c
#>   <int> <dbl> <dbl>
#> 1     1     2     1
#> 2     2     4     1
#> 3     3     6     1
#> 4     4     8     1
#> 5     5    10     1

# Columns are available in subsequent expressions:
tibble(x = runif(10), y = x * 2)
#> # A tibble: 10 × 2
#>         x     y
#>     <dbl> <dbl>
#>  1 0.900  1.80 
#>  2 0.617  1.23 
#>  3 0.704  1.41 
#>  4 0.546  1.09 
#>  5 0.807  1.61 
#>  6 0.184  0.368
#>  7 0.725  1.45 
#>  8 0.623  1.25 
#>  9 0.0574 0.115
#> 10 0.636  1.27 

# tibble() never coerces its inputs,
str(tibble(letters))
#> tibble [26 × 1] (S3: tbl_df/tbl/data.frame)
#>  $ letters: chr [1:26] "a" "b" "c" "d" ...
str(tibble(x = list(diag(1), diag(2))))
#> tibble [2 × 1] (S3: tbl_df/tbl/data.frame)
#>  $ x:List of 2
#>   ..$ : num [1, 1] 1
#>   ..$ : num [1:2, 1:2] 1 0 0 1

# or munges column names (unless requested),
tibble(`a + b` = 1:5)
#> # A tibble: 5 × 1
#>   `a + b`
#>     <int>
#> 1       1
#> 2       2
#> 3       3
#> 4       4
#> 5       5

# but it forces you to take charge of names, if they need repair:
try(tibble(x = 1, x = 2))
#> Error in tibble(x = 1, x = 2) : 
#>   Column name `x` must not be duplicated.
#> Use `.name_repair` to specify repair.
#> Caused by error in `repaired_names()` at tibble/R/names.R:14:2:
#> ! Names must be unique.
#> ✖ These names are duplicated:
#>   * "x" at locations 1 and 2.
tibble(x = 1, x = 2, .name_repair = "unique")
#> New names:
#> • `x` -> `x...1`
#> • `x` -> `x...2`
#> # A tibble: 1 × 2
#>   x...1 x...2
#>   <dbl> <dbl>
#> 1     1     2
tibble(x = 1, x = 2, .name_repair = "minimal")
#> # A tibble: 1 × 2
#>       x     x
#>   <dbl> <dbl>
#> 1     1     2

## By default, non-syntactic names are allowed,
df <- tibble(`a 1` = 1, `a 2` = 2)
## because you can still index by name:
df[["a 1"]]
#> [1] 1
df$`a 1`
#> [1] 1
with(df, `a 1`)
#> [1] 1

## Syntactic names are easier to work with, though, and you can request them:
df <- tibble(`a 1` = 1, `a 2` = 2, .name_repair = "universal")
#> New names:
#> • `a 1` -> `a.1`
#> • `a 2` -> `a.2`
df$a.1
#> [1] 1

## You can specify your own name repair function:
tibble(x = 1, x = 2, .name_repair = make.unique)
#> # A tibble: 1 × 2
#>       x   x.1
#>   <dbl> <dbl>
#> 1     1     2

fix_names <- function(x) gsub("\\s+", "_", x)
tibble(`year 1` = 1, `year 2` = 2, .name_repair = fix_names)
#> # A tibble: 1 × 2
#>   year_1 year_2
#>    <dbl>  <dbl>
#> 1      1      2

## purrr-style anonymous functions and constants
## are also supported
tibble(x = 1, x = 2, .name_repair = ~ make.names(., unique = TRUE))
#> # A tibble: 1 × 2
#>       x   x.1
#>   <dbl> <dbl>
#> 1     1     2

tibble(x = 1, x = 2, .name_repair = ~ c("a", "b"))
#> # A tibble: 1 × 2
#>       a     b
#>   <dbl> <dbl>
#> 1     1     2

# Tibbles can contain columns that are tibbles or matrices
# if the number of rows is compatible. Unnamed tibbled are
# spliced, i.e. the inner columns are inserted into the
# tibble under construction.
tibble(
  a = 1:3,
  tibble(
    b = 4:6,
    c = 7:9
  ),
  d = tibble(
    e = tibble(
      f = b
    )
  )
)
#> # A tibble: 3 × 4
#>       a     b     c d$e$f
#>   <int> <int> <int> <int>
#> 1     1     4     7     4
#> 2     2     5     8     5
#> 3     3     6     9     6
tibble(
  a = 1:3,
  b = diag(3),
  c = cor(trees),
  d = Titanic[1:3, , , ]
)
#> # A tibble: 3 × 4
#>       a b[,1]  [,2]  [,3] c[,"Girth"] [,"Height"] [,"Volume"]            d
#>   <int> <dbl> <dbl> <dbl>       <dbl>       <dbl>       <dbl> <table[,2,2>
#> 1     1     1     0     0       1           0.519       0.967          0 …
#> 2     2     0     1     0       0.519       1           0.598          0 …
#> 3     3     0     0     1       0.967       0.598       1             35 …

# Data can not contain tibbles or matrices with incompatible number of rows:
try(tibble(a = 1:3, b = tibble(c = 4:7)))
#> Error in tibble(a = 1:3, b = tibble(c = 4:7)) : 
#>   Tibble columns must have compatible sizes.
#> • Size 3: Existing data.
#> • Size 4: Column `b`.
#> ℹ Only values of size one are recycled.

# Use := to create columns with names that start with a dot:
tibble(.dotted := 3)
#> # A tibble: 1 × 1
#>   .dotted
#>     <dbl>
#> 1       3

# This also works, but might break in the future:
tibble(.dotted = 3)
#> # A tibble: 1 × 1
#>   .dotted
#>     <dbl>
#> 1       3

# You can unquote an expression:
x <- 3
tibble(x = 1, y = x)
#> # A tibble: 1 × 2
#>       x     y
#>   <dbl> <dbl>
#> 1     1     1
tibble(x = 1, y = !!x)
#> # A tibble: 1 × 2
#>       x     y
#>   <dbl> <dbl>
#> 1     1     3

# You can splice-unquote a list of quosures and expressions:
tibble(!!!list(x = rlang::quo(1:10), y = quote(x * 2)))
#> # A tibble: 10 × 2
#>        x     y
#>    <int> <dbl>
#>  1     1     2
#>  2     2     4
#>  3     3     6
#>  4     4     8
#>  5     5    10
#>  6     6    12
#>  7     7    14
#>  8     8    16
#>  9     9    18
#> 10    10    20

# Use .data, .env and !! to refer explicitly to columns or outside objects
a <- 1
tibble(a = 2, b = a)
#> # A tibble: 1 × 2
#>       a     b
#>   <dbl> <dbl>
#> 1     2     2
tibble(a = 2, b = .data$a)
#> # A tibble: 1 × 2
#>       a     b
#>   <dbl> <dbl>
#> 1     2     2
tibble(a = 2, b = .env$a)
#> # A tibble: 1 × 2
#>       a     b
#>   <dbl> <dbl>
#> 1     2     1
tibble(a = 2, b = !!a)
#> # A tibble: 1 × 2
#>       a     b
#>   <dbl> <dbl>
#> 1     2     1
try(tibble(a = 2, b = .env$bogus))
#> Error in eval_bare(sym(nm), x) : object 'bogus' not found
try(tibble(a = 2, b = !!bogus))
#> Error in quos(...) : object 'bogus' not found

# Use tibble_row() to construct a one-row tibble:
tibble_row(a = 1, lm = lm(Height ~ Girth + Volume, data = trees))
#> # A tibble: 1 × 2
#>       a lm    
#>   <dbl> <list>
#> 1     1 <lm>  
源代码:R/tibble.R

相关用法


注:本文由纯净天空筛选整理自Kirill Müller等大神的英文原创作品 Build a data frame。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。