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()
。有關這些條款以及用於執行這些條款的策略的更多詳細信息,請參閱此處。 -
也可以看看
使用 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 tibble_options 封裝選項
- R tibble tribble 逐行小標題創建
- R tibble char 設置字符向量格式
- R tibble frame_matrix 逐行矩陣創建
- R tibble num 設置數值向量的格式
- R tibble rownames 用於處理行名稱的工具
- R tibble enframe 將向量轉換為數據幀,反之亦然
- R tibble add_row 將行添加到 DataFrame
- R tibble as_tibble 將列表、矩陣等強製轉換為 DataFrame
- R tibble subsetting 子集化標題
- R tibble add_column 將列添加到 DataFrame
- R tibble lst 建立一個清單
- R tibble formatting 打印小標題
- R tibble new_tibble Tibble 構造函數和驗證器
- R tidyr separate_rows 將折疊的列分成多行
- R tidyr extract 使用正則表達式組將字符列提取為多列
- R tidyr chop 砍伐和砍伐
- R tidyr pivot_longer_spec 使用規範將數據從寬轉為長
- R tidyr unnest_longer 將列表列取消嵌套到行中
- R tidyr uncount “計數” DataFrame
- R tidyr cms_patient_experience 來自醫療保險和醫療補助服務中心的數據
- R tidyr pivot_wider_spec 使用規範將數據從長軸轉向寬軸
- R tidyverse tidyverse_update 更新 tidyverse 軟件包
- R tidyr replace_na 將 NA 替換為指定值
- R tidyr unnest_wider 將列表列取消嵌套到列中
注:本文由純淨天空篩選整理自Kirill Müller等大神的英文原創作品 Build a data frame。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。