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