我有一個列(稱為“第三方”),其中包含 20 個國家/地區的串列。現在我想在一個新變數中為每個國家/地區分配代碼(稱為“ccode2”)。我使用以下代碼:
df <- within(df, {
ccode2 <- NA
ccode2[thirdparty = "Australia"] <- "900"
ccode2[thirdparty = "Austria"] <- "305"
ccode2[thirdparty = "Belgium"] <- "211"
ccode2[thirdparty = "Bulgaria"] <- "355"
ccode2[thirdparty = "Canada"] <- "20"
ccode2[thirdparty = "Croatia"] <- "344"
ccode2[thirdparty = "Cyprus"] <- "352"
ccode2[thirdparty = "Czech Republic"] <- "315"
ccode2[thirdparty = "Denmark"] <- "390"
ccode2[thirdparty = "Estonia"] <- "366"
ccode2[thirdparty = "Finland"] <- "375"
ccode2[thirdparty = "France"] <- "220"
ccode2[thirdparty = "Germany"] <- "255"
ccode2[thirdparty = "Greece"] <- "350"
ccode2[thirdparty = "Hungary"] <- "310"
ccode2[thirdparty = "Iceland"] <- "395"
ccode2[thirdparty = "Ireland"] <- "205"
ccode2[thirdparty = "Italy"] <- "325"
ccode2[thirdparty = "Latvia"] <- "367"
ccode2[thirdparty = "Lithuania"] <- "368"
但是,它不起作用。錯誤訊息是:分配的資料 l 必須與現有資料兼容。
uj5u.com熱心網友回復:
假設這df是一個資料幀,有很多方法可以做到這一點。
mutate()
我通常使用mutate()和case_when()from解決這個問題dplyr。這是一個repex:
library(dplyr)
mtcars %>%
mutate(
new_column = case_when(
cyl == 8 ~ "A",
cyl == 6 ~ "B",
cyl == 4 ~ "C",
TRUE ~ NA_character_
)
)
您沒有在問題中包含您的資料,所以我不能確定,但??對您來說應該是這樣的:
library(dplyr)
df %>%
mutate(
ccode2 = case_when(
thirdparty == "Australia" ~ "900",
thirdparty == "Austria" ~ "305",
thirdparty == "Belgium" ~ "211",
thirdparty == "Bulgaria" ~ "355",
thirdparty == "Canada" ~ "20",
thirdparty == "Croatia" ~ "344",
thirdparty == "Cyprus" ~ "352",
# And so on...
TRUE ~ NA_character_
)
)
加入
在這種情況下,它可能會更好,以創建一個包含之間的映射另一個資料框thirdparty和ccode2,然后加入他們在一起。這是一個repex:
library(dplyr)
x <- tibble::tribble(
~ "cyl", ~ "new_column",
8, "A",
6, "B",
4, "C"
)
mtcars %>%
left_join(x)
對你來說,這應該是這樣的:
library(dplyr)
x <- tibble::tribble(
~ "thirdparty", ~ "ccode2",
"Australia", "900",
"Austria", "305",
"Belgium", "211",
"Bulgaria", "355",
"Canada", "20",
"Croatia", "344",
"Cyprus" "352"
)
df %>%
left_join(x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/394670.html
標籤:r
