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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。