spread()
的开发已完成,对于新代码,我们建议切换到 pivot_wider()
,它更易于使用,函数更强大,并且仍在积极开发中。 df %>% spread(key, value)
相当于df %>% pivot_wider(names_from = key, values_from = value)
请参阅vignette("pivot")
中的更多详细信息。
参数
- data
-
一个 DataFrame 。
- key, value
-
<
tidy-select
> 用于key
和value
的列。 - fill
-
如果设置,缺失值将替换为该值。请注意,输入中有两种类型的缺失:显式缺失值(即
NA
)和隐式缺失,即根本不存在的行。两种类型的缺失值都将替换为fill
。 - convert
-
如果
TRUE
、type.convert()
和asis = TRUE
将在每个新列上运行。如果值列是强制转换为字符串的变量的混合,这非常有用。如果值列的类是因子或日期,请注意,对于生成的新列来说,情况并非如此,这些新列在类型转换之前被强制转换为字符。 - drop
-
如果
FALSE
,将保留数据中未出现的因子水平,并用fill
填充缺失的组合。 - sep
-
如果
NULL
,列名将从key
变量的值中获取。如果不是NULL
,则列名称将由"<key_name><sep><key_value>"
给出。
例子
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)
)
stocksm <- stocks %>% gather(stock, price, -time)
stocksm %>% spread(stock, price)
#> # A tibble: 10 × 4
#> time X Y Z
#> <date> <dbl> <dbl> <dbl>
#> 1 2009-01-01 -1.06 3.45 6.16
#> 2 2009-01-02 -0.00425 1.82 -3.34
#> 3 2009-01-03 -0.926 1.81 -0.0744
#> 4 2009-01-04 -1.06 -0.634 1.87
#> 5 2009-01-05 0.374 2.24 -9.32
#> 6 2009-01-06 0.0261 1.31 6.28
#> 7 2009-01-07 -0.749 -0.985 -0.256
#> 8 2009-01-08 -0.812 2.43 0.588
#> 9 2009-01-09 0.383 -1.38 -5.79
#> 10 2009-01-10 -0.171 1.75 1.85
stocksm %>% spread(time, price)
#> # A tibble: 3 × 11
#> stock 2009-01…¹ 2009-0…² 2009-…³ 2009-…⁴ 2009-…⁵ 2009-…⁶ 2009-…⁷ 2009-…⁸
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 X -1.06 -0.00425 -0.926 -1.06 0.374 0.0261 -0.749 -0.812
#> 2 Y 3.45 1.82 1.81 -0.634 2.24 1.31 -0.985 2.43
#> 3 Z 6.16 -3.34 -0.0744 1.87 -9.32 6.28 -0.256 0.588
#> # … with 2 more variables: `2009-01-09` <dbl>, `2009-01-10` <dbl>, and
#> # abbreviated variable names ¹`2009-01-01`, ²`2009-01-02`,
#> # ³`2009-01-03`, ⁴`2009-01-04`, ⁵`2009-01-05`, ⁶`2009-01-06`,
#> # ⁷`2009-01-07`, ⁸`2009-01-08`
# Spread and gather are complements
df <- tibble(x = c("a", "b"), y = c(3, 4), z = c(5, 6))
df %>%
spread(x, y) %>%
gather("x", "y", a:b, na.rm = TRUE)
#> # A tibble: 2 × 3
#> z x y
#> <dbl> <chr> <dbl>
#> 1 5 a 3
#> 2 6 b 4
# Use 'convert = TRUE' to produce variables of mixed type
df <- tibble(
row = rep(c(1, 51), each = 3),
var = rep(c("Sepal.Length", "Species", "Species_num"), 2),
value = c(5.1, "setosa", 1, 7.0, "versicolor", 2)
)
df %>% spread(var, value) %>% str()
#> tibble [2 × 4] (S3: tbl_df/tbl/data.frame)
#> $ row : num [1:2] 1 51
#> $ Sepal.Length: chr [1:2] "5.1" "7"
#> $ Species : chr [1:2] "setosa" "versicolor"
#> $ Species_num : chr [1:2] "1" "2"
df %>% spread(var, value, convert = TRUE) %>% str()
#> tibble [2 × 4] (S3: tbl_df/tbl/data.frame)
#> $ row : num [1:2] 1 51
#> $ Sepal.Length: num [1:2] 5.1 7
#> $ Species : chr [1:2] "setosa" "versicolor"
#> $ Species_num : int [1:2] 1 2
相关用法
- R tidyr separate_rows 将折叠的列分成多行
- R tidyr separate 使用正则表达式或数字位置将字符列分成多列
- R tidyr separate_longer_delim 将字符串拆分为行
- R tidyr separate_wider_delim 将字符串拆分为列
- 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 pivot_wider 将数据从长轴转向宽轴
- R tidyr nest_legacy Nest() 和 unnest() 的旧版本
- R tidyr gather 将列收集到键值对中
- R tidyr hoist 将值提升到列表列之外
- R tidyr pivot_longer 将数据从宽转为长
- R tidyr pack 打包和拆包
- R tidyr drop_na 删除包含缺失值的行
- R tidyr fill 用上一个或下一个值填充缺失值
- R tidyr tidyr_legacy 旧名称修复
- R tidyr complete 完成缺少数据组合的 DataFrame
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Spread a key-value pair across multiple columns。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。