加宽 R 数据框
Widen R dataframe
我正在尝试在 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 只有一个代码,那么在第一个之后的所有新生成的列都应该用 NA 填充。生成的数据框应如下所示:
ID
CODE1
CODE2
CODE3
1
123
NA
NA
2
938
293
456
3
203
203
NA
4
91
NA
NA
如果重复的代码也能被删除,结果实际上是这样的(这样 ID 3 的 203 第二次出现就变成 NA)就更好了:
ID
CODE1
CODE2
CODE3
1
123
NA
NA
2
938
293
456
3
203
NA
NA
4
91
NA
NA
我可以通过连接代码(通过 group_by 和总结)然后将代码分成单独的列来做到这一点,但我想有更直接的方法来做到这一点。
感谢您的任何建议!
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
我正在尝试在 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 只有一个代码,那么在第一个之后的所有新生成的列都应该用 NA 填充。生成的数据框应如下所示:
ID | CODE1 | CODE2 | CODE3 |
---|---|---|---|
1 | 123 | NA | NA |
2 | 938 | 293 | 456 |
3 | 203 | 203 | NA |
4 | 91 | NA | NA |
如果重复的代码也能被删除,结果实际上是这样的(这样 ID 3 的 203 第二次出现就变成 NA)就更好了:
ID | CODE1 | CODE2 | CODE3 |
---|---|---|---|
1 | 123 | NA | NA |
2 | 938 | 293 | 456 |
3 | 203 | NA | NA |
4 | 91 | NA | NA |
我可以通过连接代码(通过 group_by 和总结)然后将代码分成单独的列来做到这一点,但我想有更直接的方法来做到这一点。
感谢您的任何建议!
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