簡體   English   中英

r- 嘗試將 mutate 與 case_when 一起使用時出錯

[英]r- Error when trying to use mutate with case_when

我正在嘗試將矢量添加到包含每個美國 state 區域的數據框。我嘗試了以下代碼並不斷收到錯誤消息。 我是 tidyverse 的新手,所以您可以提供任何幫助,我們將不勝感激。 我猜這是一些小而令人尷尬的事情。 :)

df <- df %>%
  mutate(region = case_when((State=="Connecticut"|State=="Maine"|State=="Massachusetts"|State=="New Hampshire"|State=="Rhode Island"|State=="Vermont"~ "New England"), 
                            case_when((State=="Delaware"| State=="District of Columbia" | State=="Maryland"| State=="New Jersey"| State=="New York"| State=="Pennsylvania"~ "Central Atlanic"),
                                      case_when((State=="Florida"| State=="Georgia"| State=="North Carolina"|State=="South Carolina"|  State=="Virginia"| State=="West Virginia"~ "Lower Atlantic"),
                                                case_when((State=="Illinois"| State=="Indiana"| State=="Iowa"| State=="Kansas"| State=="Kentucky"| State=="Michigan"| State=="Minnesota"| State=="Missouri"| State=="Nebraska"| State=="North Dakota"| State=="Ohio"| State=="Oklahoma"| State=="South Dakota"| State=="Tennessee" |State=="Wisconsin"~ "Midwest"),
                                                          case_when((State=="Alabama" | State=="Arkansas" | State=="Louisiana"| State=="Mississippi"| State=="New Mexico"| State=="Texas"~ "Gulf Coast"), 
                                                                    case_when((State=="Colorado"| State=="Idaho" | State=="Montana"| State=="Utah"| State=="Wyoming"~ "Rocky Mountain"),
                                                                              case_when((State=="Alaska" | State=="Arizona" | State=="California"| State=="Hawaii" | State=="Nevada"| State=="Oregon"| State=="Washington"~ "West Coast"), TRUE~"NA"))))))))

mutate()錯誤:! 計算region = case_when(...)時出現問題。 case_when()中的錯誤引起:! 案例 2( (State == "Colorado" | State == "Idaho" | State == "Montana" | State == "Utah" | State == "Wyoming" ~ "Rocky Mountain") )必須是兩個 -雙面公式,而不是字符向量。

文檔所示,無需嵌套case_when 簡單地說,用逗號分隔互斥條件。 另外,考慮%in%並避免多次OR調用。

mutate(region = case_when(
    State %in% c("Connecticut", "Maine", "Massachusetts", "New Hampshire", "Rhode Island", "Vermont") ~ "New England"), 
    State %in% c("Delaware", "District of Columbia", "Maryland", "New Jersey", "New York", "Pennsylvania") ~ "Central Atlantic"),
    ..., 
    TRUE ~ NA
))

事實上,考慮簡單地合並並避免任何條件邏輯:

txt = 'State Region
Connecticut "New England"
Maine "New England"
Massachusetts "New England"
"New Hampshire" "New England"
"Rhode Island" "New England"
Vermont "New England"
Delaware "Central Atlantic"
"District of Columbia" "Central Atlantic"
Maryland "Central Atlantic"
"New Jersey" "Central Atlantic"
"New York" "Central Atlantic"
Pennsylvania  "Central Atlantic"
...'

region_df <- read.table(text = txt, header = TRUE)
region_df
#                   State           Region
# 1           Connecticut      New England
# 2                 Maine      New England
# 3         Massachusetts      New England
# 4         New Hampshire      New England
# 5          Rhode Island      New England
# 6               Vermont      New England
# 7              Delaware Central Atlantic
# 8  District of Columbia Central Atlantic
# 9              Maryland Central Atlantic
# 10           New Jersey Central Atlantic
# 11             New York Central Atlantic
# 12         Pennsylvania Central Atlantic
# ...

main_df <- merge(main_df, region_df, by = "State")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM