我试图在R中扩大数据框架,但似乎以一种不寻常的方式,因为我在这里进行了大量搜索后,还没有找到一种简单的方法来做到这一点。
假设我有一个这样的数据帧,其中ID是一个数字,用来标识一个唯一的人,这个唯一的人可能有几个与他们相关的代码:
ID<-c(1, 2, 2, 2, 3, 3,4)
CODE<-c(123, 938, 293, 456, 203, 203, 91)
df <- data.frame(ID, CODE)
我想扩大它,以便每个ID只有一行,并将代码添加到其他列。这将导致生成的新列的数量与关联代码数量最多的ID对应的代码的数量一样多。例如,如果一个ID只有一个代码,那么在第一个代码之后新生成的所有列都应该用NAs填充。生成的数据框应该如下所示:
<表类>ID CODE1 CODE2 CODE3 tbody><<tr>1 123 NA NA 2938 293 456 3 203 203 NA 491 NA NA 表类>
library(tidyverse)
df %>%
distinct(ID, CODE) %>%
group_by(ID) %>%
mutate(col = paste0("CODE", row_number())) %>%
ungroup() %>%
pivot_wider(names_from = col, values_from = CODE)
结果
# A tibble: 4 x 4
ID CODE1 CODE2 CODE3
<dbl> <dbl> <dbl> <dbl>
1 1 123 NA NA
2 2 938 293 456
3 3 203 NA NA
4 4 91 NA NA