這是一個示例資料框:
df <- data.frame ("user.id" = c("usr1", "usr2", "usr3", "usr4"),
"gender" = c("m", "f", "m", "f"),
"fav.car.rank" = c("toyota, subaru, honda", "honda, subaru, toyota", "toyota, honda, subaru", "subaru, toyota, honda"))
我有一個名為“fav.car.rank”的專欄。汽車品牌以逗號分隔并按層次順序排列(從最喜歡到最不喜歡。//例如 usr1 最喜歡的品牌是豐田)。
我想為每個汽車品牌創建單獨的列,其中包括該汽車品牌的排名。我想要一個看起來像這樣的資料框:
| 用戶身份 | 性別 | 豐田 | 斯巴魯 | 本田 |
|---|---|---|---|---|
| usr1 | 米 | 3 | 2 | 1 |
| usr2 | F | 1 | 2 | 3 |
| usr3 | 米 | 3 | 1 | 2 |
| usr4 | F | 2 | 3 | 1 |
謝謝!
uj5u.com熱心網友回復:
一個更簡單的選擇是在 處拆分,以擴展行separate_rows,在按“user.id”分組后通過 ersed 創建序列列rev,然后使用 重塑為“寬”格式pivot_wider
library(dplyr)
library(tidyr)
df %>%
separate_rows(fav.car.rank) %>%
group_by(user.id) %>%
mutate(n = rev(row_number())) %>%
ungroup %>%
pivot_wider(names_from = fav.car.rank, values_from = n)
-輸出
# A tibble: 4 × 5
user.id gender toyota subaru honda
<chr> <chr> <int> <int> <int>
1 usr1 m 3 2 1
2 usr2 f 1 2 3
3 usr3 m 3 1 2
4 usr4 f 2 3 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/488559.html
