如何将数据从长格式转换为宽格式,以便将重复行添加到末尾以在 R 中创建新列?

How to turn data from long to wide format so that duplicate rows get added to the end to make new columns in R?

我得到了以下数据。

 
ID  NAME   STATUS  OKR_T  OKR_N  NR
1   Jack     1      34     OK1    0
1   Jack     1     433     OK2    0
1   Jack     1      12     OK3    1
2   Bill     2      34     OK1    1
3   Steve    1     433     OK2    1
3   Steve    1      34     OK1    0
3   Steve    1      45     OK4    0

我需要得到这个:

 
ID  NAME   STATUS  OKR_T.x  OKR_N.x  NR.x  OKR_T.y  OKR_N.y   NR.y OKR_T.z  OKR_N.z  NR.z
1   Jack     1      34      OK1       0     433       OK2      0     12       OK3     1
2   Bill     2      34      OK1       1
3   Steve    1     433      OK2       1      34       OK1      0     45       OK4     0      

我把 .x ; .y 和 .z 到列名的末尾,因为如果我没记错的话,这就是 R 命名具有相同名称的列的方式。对我来说,重复列的确切命名方式并不重要,只要我能分辨出 OKR_T 的区别即可; OKR_N 和 NR 来自同一个原始行。

我在 R 方面的经验有限,到目前为止,我已经使用 dcast 将我的数据从长到宽重塑,但我无法使用它。由于逻辑不同,我认为我需要另一种方法来做到这一点。

感谢您的帮助:)

library(tidyverse)
df <- read.table(
  text = "ID  NAME   STATUS  OKR_T  OKR_N  NR
1   Jack     1      34     OK1    0
1   Jack     1     433     OK2    0
1   Jack     1      12     OK3    1
2   Bill     2      34     OK1    1
3   Steve    1     433     OK2    1
3   Steve    1      34     OK1    0
3   Steve    1      45     OK4    0",
  header = T
)
df %>%
  group_by(ID) %>%
  mutate(rid = row_number()) %>%
  pivot_wider(
    id_cols = c(ID, NAME, STATUS),
    names_from = rid,
    values_from = c(OKR_T, OKR_N, NR)
  )
#> # A tibble: 3 x 12
#> # Groups:   ID [3]
#>      ID NAME  STATUS OKR_T_1 OKR_T_2 OKR_T_3 OKR_N_1 OKR_N_2 OKR_N_3  NR_1  NR_2
#>   <int> <chr>  <int>   <int>   <int>   <int> <chr>   <chr>   <chr>   <int> <int>
#> 1     1 Jack       1      34     433      12 OK1     OK2     OK3         0     0
#> 2     2 Bill       2      34      NA      NA OK1     <NA>    <NA>        1    NA
#> 3     3 Steve      1     433      34      45 OK2     OK1     OK4         1     0
#> # ... with 1 more variable: NR_3 <int>

reprex package (v2.0.1)

于 2021-09-08 创建