當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。