我正在嘗試擴大 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 的代碼數量最多。例如,如果一個 ID 只有一個代碼,那么第一個之后所有新生成的列都應該用 NA 填充。生成的資料框應如下所示:
| ID | 代碼1 | 代碼2 | 代碼3 |
|---|---|---|---|
| 1 | 123 | 不適用 | 不適用 |
| 2 | 938 | 293 | 456 |
| 3 | 203 | 203 | 不適用 |
| 4 | 91 | 不適用 | 不適用 |
如果也可以洗掉重復的代碼,結果實際上是這樣的(這樣 ID 3 的第二次出現的 203 就變成了 NA),那就更好了:
| ID | 代碼1 | 代碼2 | 代碼3 |
|---|---|---|---|
| 1 | 123 | 不適用 | 不適用 |
| 2 | 938 | 293 | 456 |
| 3 | 203 | 不適用 | 不適用 |
| 4 | 91 | 不適用 | 不適用 |
我可以通過連接代碼(通過 group_by 和 summarise)然后將代碼分成單獨的列來做到這一點,但我想有一種更直接的方法來做到這一點。
感謝您的任何建議!
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331175.html
