根据id变量的长度创建第三个变量

时间:2018-10-09 20:16:24

标签: r

我正在尝试创建第三个变量,以将长格式转换为宽格式。

我的数据具有以下形式:

ID <- c(1,1,1,2,2,2,2,3,3,4,5,5)
CODE <- c(123,222,231,534,634525,3545,2342,235234,3453,2342,5345,64564)
df <- data.frame(ID, CODE)
df

   ID   CODE
1   1    123
2   1    222
3   1    231
4   2    534
5   2 634525
6   2   3545
7   2   2342
8   3 235234
9   3   3453
10  4   2342
11  5   5345
12  5  64564

但是我要创建的是这种形式的东西:

    ID2  code1  code2 code3 code4
  1   1    123    222   231      
  2   2    534 634525  3545  2342
  3   3 235234   3453  

"code#"变量的最高值基于IDdf变量的最长长度。然后,就像我想要的输出示例一样,将没有任何值的ID编码为""

1 个答案:

答案 0 :(得分:1)

这是一种tidyverse的方法:

library(tidyverse)

df %>%
  group_by(ID) %>%
  mutate(key = paste0("code", row_number())) %>%
  spread(key, CODE)

# A tibble: 5 x 5
# Groups:   ID [5]
     ID  code1  code2 code3 code4
  <dbl>  <dbl>  <dbl> <dbl> <dbl>
1     1    123    222   231    NA
2     2    534 634525  3545  2342
3     3 235234   3453    NA    NA
4     4   2342     NA    NA    NA
5     5   5345  64564    NA    NA