在 R 中将数据帧从长转换为宽

问题描述 投票:0回答:1

我想将下面的长数据帧(参见示例)转换为宽格式。

我的数据结构看起来像这样 |月份 | ID |发送| F | | -------- | -------------- |------|---| | 12 | 12 1 | -0.1 |1| | 12 | 12 1 | -0.1|2| | 24 | 1 | 0.1 |3| | 60| 1 | -0.45|4| | 12 | 12 2 | -0.34 |1| | 12 | 12 2 | 0.123|2| | 24 | 2 | 0.15 |3| | 12 | 12 3 | 0.4|1| | 12 | 12 3 | -0.153|2| | 24 | 3 | -0.5|3|

我的身材是这样的

pivot_wider(
  df.supine, 
  names_from = df.supine$Month,
  names_prefix="Month_", 
  values_from = df.supine$Tx
)

我收到以下错误:

Error in `pivot_wider()`:
! Can't subset columns past the end.
ℹ Locations 60, 96, 60, …, 60, and 96 don't exist.
ℹ There are only 30 columns.
Backtrace:
 1. tidyr::pivot_wider(...)
 2. tidyr:::pivot_wider.data.frame(...)

如何修复此错误?

我的猜测是,问题是,并非所有 ID 都有所有月份。

r
1个回答
0
投票
library(tidyverse)

df.supine <- tribble(
  ~Month, ~ID, ~Tx, ~F,
  12, 1, -0.1, 1,
  12, 1, -0.1, 2,
  24, 1, 0.1, 3,
  60, 1, -0.45, 4,
  12, 2, -0.34, 1,
  12, 2, 0.123, 2,
  24, 2, 0.15, 3,
  12, 3, 0.4, 1,
  12, 3, -0.153, 2,
  24, 3, -0.5, 3
)

pivot_wider(
  df.supine, 
  names_from = "Month",
  names_prefix = "Month_", 
  values_from = "Tx"
)
#> # A tibble: 10 × 5
#>       ID     F Month_12 Month_24 Month_60
#>    <dbl> <dbl>    <dbl>    <dbl>    <dbl>
#>  1     1     1   -0.1      NA       NA   
#>  2     1     2   -0.1      NA       NA   
#>  3     1     3   NA         0.1     NA   
#>  4     1     4   NA        NA       -0.45
#>  5     2     1   -0.34     NA       NA   
#>  6     2     2    0.123    NA       NA   
#>  7     2     3   NA         0.15    NA   
#>  8     3     1    0.4      NA       NA   
#>  9     3     2   -0.153    NA       NA   
#> 10     3     3   NA        -0.5     NA

创建于 2024-05-08,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.