gather()
的開發已完成,對於新代碼,我們建議切換到 pivot_longer()
,它更易於使用,函數更強大,並且仍在積極開發中。 df %>% gather("key", "value", x, y, z)
相當於df %>% pivot_longer(c(x, y, z), names_to = "key", values_to = "value")
請參閱vignette("pivot")
中的更多詳細信息。
用法
gather(
data,
key = "key",
value = "value",
...,
na.rm = FALSE,
convert = FALSE,
factor_key = FALSE
)
參數
- data
-
一個 DataFrame 。
- key, value
-
新鍵和值列的名稱,作為字符串或符號。
該參數通過表達式傳遞並支持quasiquotation(您可以取消引用字符串和符號)。該名稱是從帶有
rlang::ensym()
的表達式中捕獲的(請注意,這種符號不代表實際對象的接口現在在 tidyverse 中不鼓勵使用;我們在這裏支持它是為了向後兼容)。 - ...
-
列的選擇。如果為空,則選擇所有變量。您可以提供裸變量名稱,使用
x:z
選擇 x 和 z 之間的所有變量,使用-y
排除 y。有關更多選項,請參閱dplyr::select()
文檔。另請參閱下麵有關選擇規則的部分。 - na.rm
-
如果
TRUE
,將從輸出中刪除值列為NA
的行。 - convert
-
如果
TRUE
會自動在鍵列上運行type.convert()
。如果列類型實際上是數字、整數或邏輯,這非常有用。 - factor_key
-
如果是
FALSE
(默認值),則鍵值將存儲為字符向量。如果TRUE
,將被存儲為一個因子,這會保留列的原始順序。
評選規則
選擇列的參數被傳遞到tidyselect::vars_select()
並進行特殊處理。與其他動詞不同,選擇函數嚴格區分數據表達式和上下文表達式。
-
數據表達式可以是像
x
這樣的裸名稱,也可以是像x:y
或c(x, y)
這樣的表達式。在數據表達式中,您隻能引用 DataFrame 中的列。 -
其他一切都是上下文表達式,您隻能在其中引用使用
<-
定義的對象。
例如,col1:col3
是引用數據列的數據表達式,而 seq(start, end)
是引用上下文中的對象的上下文表達式。
如果需要從數據表達式引用上下文對象,可以使用 all_of()
或 any_of()
。這些函數用於選擇名稱存儲在env-variable中的data-variables。例如, all_of(a)
選擇字符向量 a
中列出的變量。有關更多詳細信息,請參閱tidyselect::select_helpers()
文檔。
例子
# From https://stackoverflow.com/questions/1181060
stocks <- tibble(
time = as.Date("2009-01-01") + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
gather(stocks, "stock", "price", -time)
#> # A tibble: 30 × 3
#> time stock price
#> <date> <chr> <dbl>
#> 1 2009-01-01 X 0.0930
#> 2 2009-01-02 X 1.56
#> 3 2009-01-03 X 0.169
#> 4 2009-01-04 X -0.587
#> 5 2009-01-05 X -0.356
#> 6 2009-01-06 X 3.32
#> 7 2009-01-07 X -1.10
#> 8 2009-01-08 X -0.127
#> 9 2009-01-09 X -0.434
#> 10 2009-01-10 X -0.0206
#> # … with 20 more rows
stocks %>% gather("stock", "price", -time)
#> # A tibble: 30 × 3
#> time stock price
#> <date> <chr> <dbl>
#> 1 2009-01-01 X 0.0930
#> 2 2009-01-02 X 1.56
#> 3 2009-01-03 X 0.169
#> 4 2009-01-04 X -0.587
#> 5 2009-01-05 X -0.356
#> 6 2009-01-06 X 3.32
#> 7 2009-01-07 X -1.10
#> 8 2009-01-08 X -0.127
#> 9 2009-01-09 X -0.434
#> 10 2009-01-10 X -0.0206
#> # … with 20 more rows
# get first observation for each Species in iris data -- base R
mini_iris <- iris[c(1, 51, 101), ]
# gather Sepal.Length, Sepal.Width, Petal.Length, Petal.Width
gather(mini_iris, key = "flower_att", value = "measurement",
Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
#> Species flower_att measurement
#> 1 setosa Sepal.Length 5.1
#> 2 versicolor Sepal.Length 7.0
#> 3 virginica Sepal.Length 6.3
#> 4 setosa Sepal.Width 3.5
#> 5 versicolor Sepal.Width 3.2
#> 6 virginica Sepal.Width 3.3
#> 7 setosa Petal.Length 1.4
#> 8 versicolor Petal.Length 4.7
#> 9 virginica Petal.Length 6.0
#> 10 setosa Petal.Width 0.2
#> 11 versicolor Petal.Width 1.4
#> 12 virginica Petal.Width 2.5
# same result but less verbose
gather(mini_iris, key = "flower_att", value = "measurement", -Species)
#> Species flower_att measurement
#> 1 setosa Sepal.Length 5.1
#> 2 versicolor Sepal.Length 7.0
#> 3 virginica Sepal.Length 6.3
#> 4 setosa Sepal.Width 3.5
#> 5 versicolor Sepal.Width 3.2
#> 6 virginica Sepal.Width 3.3
#> 7 setosa Petal.Length 1.4
#> 8 versicolor Petal.Length 4.7
#> 9 virginica Petal.Length 6.0
#> 10 setosa Petal.Width 0.2
#> 11 versicolor Petal.Width 1.4
#> 12 virginica Petal.Width 2.5
相關用法
- 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 tidyr replace_na 將 NA 替換為指定值
- R tidyr unnest_wider 將列表列取消嵌套到列中
- R tidyr full_seq 在向量中創建完整的值序列
- R tidyr nest 將行嵌套到 DataFrame 的列表列中
- R tidyr separate 使用正則表達式或數字位置將字符列分成多列
- R tidyr pivot_wider 將數據從長軸轉向寬軸
- R tidyr nest_legacy Nest() 和 unnest() 的舊版本
- R tidyr separate_longer_delim 將字符串拆分為行
- R tidyr hoist 將值提升到列表列之外
- R tidyr pivot_longer 將數據從寬轉為長
- R tidyr pack 打包和拆包
- R tidyr separate_wider_delim 將字符串拆分為列
- R tidyr drop_na 刪除包含缺失值的行
- R tidyr fill 用上一個或下一個值填充缺失值
- R tidyr tidyr_legacy 舊名稱修複
- R tidyr complete 完成缺少數據組合的 DataFrame
- R tidyr expand 擴展 DataFrame 以包含所有可能的值組合
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Gather columns into key-value pairs。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。