如何在R中将匹配的year-ID-covariate行合并为一行时,将感兴趣的列透视为多列?

yk9xbfzb  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(70)

我试图用R来透视一个包含许多变量和观测值的数据集。
每一行都是一个ID-Year-Outcome三元组。每个ID-年份-亮度三元组具有一个或多个随时间变化的对应颜色。
| ID|年|颜色|亮度|
| --|--|--|--|
| 1 | 2001 |红色|高|
| 1 | 2001 |蓝色|高|
| 1 | 2002 |红色|介质|
| 1 | 2002 |绿色|介质|
| 2 | 2002 |蓝色|低|
| 2 | 2003 |蓝色|介质|
| 2 | 2003 |黄色|介质|
| 3 | 2003 |绿色|高|
| 3 | 2004 |橙子|低|
我想把每个ID-年份-亮度三元组合并到一个单行中,并把“颜色”变量分散在多个列中。
我希望它看起来像这样:
| ID|年|颜色1|颜色2|亮度|
| --|--|--|--|--|
| 1 | 2001 |红色|蓝色|高|
| 1 | 2002 |红色|绿色|介质|
| 2 | 2002 |蓝色||低|
| 2 | 2003 |蓝色|黄色|介质|
| 3 | 2003 |绿色||高|
| 3 | 2004 |橙子||低|
我试过使用pivot_wider和dcast以及cSplit和tidyr::spread,但不幸的是,到目前为止还没有什么对我有用的。
任何帮助将不胜感激!

w41d8nur

w41d8nur1#

tidyr::pivot_wider()可以产生您想要的输出。首先,我们需要添加一个列来标识IDYear的每个组合的行号。

library(tidyverse)

df |>
  group_by(ID, Year) |>
  mutate(name = row_number()) |>
  pivot_wider(id_cols = c(ID, Year),
              values_from = c(Color, Brightness))
#> # A tibble: 6 × 6
#> # Groups:   ID, Year [6]
#>      ID  Year Color_1 Color_2 Brightness_1 Brightness_2
#>   <int> <int> <chr>   <chr>   <chr>        <chr>       
#> 1     1  2001 Red     Blue    High         High        
#> 2     1  2002 Red     Green   Medium       Medium      
#> 3     2  2002 Blue    <NA>    Low          <NA>        
#> 4     2  2003 Blue    Yellow  Medium       Medium      
#> 5     3  2003 Green   <NA>    High         <NA>        
#> 6     3  2004 Orange  <NA>    Low          <NA>

相关问题