我正在尝试创建第三个变量,以将长格式转换为宽格式。
我的数据具有以下形式:
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#"
变量的最高值基于ID
中df
变量的最长长度。然后,就像我想要的输出示例一样,将没有任何值的ID编码为""
。
答案 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