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


R tidyr spread 将键值对分布在多个列上


[Superseded]

spread() 的开发已完成,对于新代码,我们建议切换到 pivot_wider() ,它更易于使用,函数更强大,并且仍在积极开发中。 df %>% spread(key, value) 相当于df %>% pivot_wider(names_from = key, values_from = value)

请参阅vignette("pivot") 中的更多详细信息。

用法

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE, sep = NULL)

参数

data

一个 DataFrame 。

key, value

< tidy-select > 用于 keyvalue 的列。

fill

如果设置,缺失值将替换为该值。请注意,输入中有两种类型的缺失:显式缺失值(即 NA )和隐式缺失,即根本不存在的行。两种类型的缺失值都将替换为 fill

convert

如果 TRUEtype.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/spread.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Spread a key-value pair across multiple columns。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。