我在 R 中有以下資料框,我想從中創建一個包含每個市政的 Nut 的新列(參見第二個表)。“堅果”僅指葡萄牙較高等級的自治市。為了以后的分析,我需要按 Nuts 對資料進行分組。整個資料框由 308 個城市和 25 個 Nuts 組成。
有人對如何完成這項任務有建議嗎?由于每個 Nut 的市政當局數量不同,我很難從哪里開始。
| 地理組 | 堅果市政 |
|---|---|
| 堅果三 | 中音米尼奧 |
| 市政 | 阿科斯·德·瓦爾德韋斯 |
| 市政 | 卡米尼亞 |
| 市政 | 蒙桑 |
| 市政 | 蓬特達巴薩 |
| 堅果三 | 蓬特達巴薩 |
| 市政 | 阿馬雷斯 |
| 市政 | 巴塞洛斯 |
| 市政 | 布拉加 |
| 堅果三 | 法菲 |
| 市政 | 大道 |
這就是我想要的最終結果。
| 地理組 | 堅果市政 | 堅果 |
|---|---|---|
| 堅果三 | 中音米尼奧 | |
| 市政 | 阿科斯·德·瓦爾德韋斯 | 中音米尼奧 |
| 市政 | 卡米尼亞 | 中音米尼奧 |
| 市政 | 蒙桑 | 中音米尼奧 |
| 市政 | 蓬特達巴薩 | 中音米尼奧 |
| 堅果三 | 卡瓦多 | |
| 市政 | 阿馬雷斯 | 卡瓦多 |
| 市政 | 巴塞洛斯 | 卡瓦多 |
| 市政 | 布拉加 | 卡瓦多 |
| 堅果三 | 大道 | |
| 市政 | 法菲 | 大道 |
| 市政 | 蒙迪姆德巴斯托 | 大道 |
我在從哪里開始有困難,到目前為止還沒有找到任何方法。
uj5u.com熱心網友回復:
第二種選擇是使用tidyr::filland if_else:
library(tidyverse)
dat |>
mutate(Nut = if_else(grepl("^Nut", `geo-group`), nuts_municipal, NA_character_)) |>
tidyr::fill(Nut) |>
mutate(Nut = if_else(grepl("^Nut", `geo-group`), "", Nut))
#> geo-group nuts_municipal Nut
#> 1 Nut III Alto Minho
#> 2 Municipal Arcos de Valdevez Alto Minho
#> 3 Municipal Caminha Alto Minho
#> 4 Municipal Mon??o Alto Minho
#> 5 Municipal Ponte da Barca Alto Minho
#> 6 Nuts III Ponte da Barca
#> 7 Municipal Amares Ponte da Barca
#> 8 Municipal Barcelos Ponte da Barca
#> 9 Municipal Braga Ponte da Barca
#> 10 Nuts III Fafe
#> 11 Municipal Ave Fafe
資料
dat <- data.frame(
check.names = FALSE,
`geo-group` = c("Nut III","Municipal",
"Municipal","Municipal","Municipal","Nuts III","Municipal",
"Municipal","Municipal","Nuts III","Municipal"),
nuts_municipal = c("Alto Minho",
"Arcos de Valdevez","Caminha","Mon??o","Ponte da Barca",
"Ponte da Barca","Amares","Barcelos","Braga","Fafe","Ave")
)
uj5u.com熱心網友回復:
你可以group_byNuts III 然后使用first:
df %>%
group_by(gp = cumsum(`geo-group` == "Nuts III")) %>%
mutate(Nut = ifelse(row_number() == 1, "", first(nuts_municipal)))
uj5u.com熱心網友回復:
謝謝斯特凡,
我可以使用您的示例資料框執行代碼,但不幸的是,該代碼不適用于我的原始資料框。它只回傳一個包含空字符行的列。似乎代碼的第二部分甚至沒有執行。我沒有收到任何錯誤訊息。
crude_death_rate <- crude_death_rate %>% as.data.frame(check.names = FALSE) %>%
mutate(Nut = if_else(grepl("^Nut", geo_group), nuts_municipal, NA_character_)) %>%
tidyr::fill(Nut) %>%
mutate(Nut = if_else(grepl("^Nut", geo_group), "", Nut))
這是將代碼應用于原始df時我的輸出圖片。 資料框截圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526492.html
標籤:r数据框多列数据争吵变异
