具有三个选项的 ifelse 语句存在问题

问题描述 投票:0回答:1

我在转换变量时遇到问题。

我有一个名为 Originating_body 的变量(目前是一个因素,但我也尝试过 as.character 无济于事),它由 13 种类型组成,我想将其减少到 3 种类型,称为 origin.simple。

Original_body 起源.简单
“法院(第二部分)” 商会
“法院(第二部分)” 商会
“法院(第二部分)” 商会
“法院(第四部分)” 商会
“法院(第三部分)” 商会
“法院(第一科委员会)” 委员会
“法院(第三科委员会)” 委员会
“法院(第五科委员会)” 委员会
“法庭(分庭)” 商会
“法院(全体会议)” 大殿
“法庭(大庭室)” 大殿

变量转换的完整列表是:

新类别:“Grand Chamber”由 “法庭(大法庭)” “法院(全体会议)”)

新类别“Chamber”,由 “法庭(分庭)” 《法院(第五组)》 “法院(第一部分)” 《法院(第四部分)》 《法院(第二组)》 《法院(第三部分)》

新类别“委员会”由以下人员组成: 《法院第五科委员会》 “法院(第一科委员会)” 《法院(第四科委员会》) 《法院(第二科委员会》) 《法院(第三科委员会》)

没有缺失值

示例数据:

df<-data.frame(Originating_body) 
Originating_body <- c("Court (Fourth Section)", "Court (Fourth Section)", "Court (Fourth Section)", 
                    "Court (Third Section)", "Court (Grand Chamber)", "Court (Second Section)", 
                    "Court (Second Section)", "Court (Third Section)", "Court (Third Section)", 
                    "Court (Fourth Section Committee)", "Court (Chamber)", "Court (Second Section)", 
                    "Court (Third Section)", "Court (Third Section)", "Court (Second Section)", 
                    "Court (Second Section)", "Court (Second Section)", "Court (Second Section)", 
                    "Court (Third Section)", "Court (Third Section)", "Court (Third Section)", 
                    "Court (Second Section)", "Court (Grand Chamber)", "Court (First Section)", 
                    "Court (Plenary)", "Court (First Section)", "Court (Third Section)", 
                    "Court (Second Section)", "Court (First Section)", "Court (First Section)", 
                    "Court (First Section)", "Court (First Section)", "Court (First Section)", 
                    "Court (First Section)", "Court (Fifth Section)", "Court (Fifth Section)", 
                    "Court (Fifth Section)", "Court (Grand Chamber)", "Court (First Section)", 
                    "Court (First Section)", "Court (Third Section)", "Court (Third Section)", 
                    "Court (Second Section Committee)", "Court (Second Section)", "Court (Second Section)", 
                    "Court (Second Section)", "Court (Fourth Section)", "Court (Third Section)", 
                    "Court (Fourth Section)", "Court (Fourth Section)", "Court (Third Section)", 
                    "Court (Second Section)", "Court (Second Section)", "Court (Second Section)", 
                    "Court (Second Section)", "Court (Second Section)", "Court (Second Section)", 
                    "Court (Third Section)", "Court (Second Section)", "Court (Second Section)", 
                    "Court (Second Section)", "Court (Second Section)", "Court (First Section)", 
                    "Court (First Section)", "Court (First Section)", "Court (First Section)", 
                    "Court (First Section Committee)", "Court (First Section)", "Court (Third Section)", 
                    "Court (First Section)", "Court (Third Section)", "Court (Second Section)", 
                    "Court (Third Section)", "Court (Third Section)", "Court (Third Section)", 
                    "Court (Second Section)", "Court (Fifth Section)", "Court (Third Section)", 
                    "Court (Fifth Section)", "Court (Third Section)", "Court (Fifth Section)", 
                    "Court (Third Section)", "Court (Third Section Committee)", "Court (Third Section)", 
                    "Court (Third Section)", "Court (Fifth Section)", "Court (Fifth Section Committee)", 
                    "Court (First Section)", "Court (First Section)", "Court (First Section)", 
                    "Court (Second Section)", "Court (Second Section)", "Court (First Section)", 
                    "Court (First Section)", "Court (First Section)", "Court (First Section)", 
                    "Court (First Section)", "Court (First Section Committee)", "Court (First Section)", 
                    "Court (First Section)", "Court (First Section)", "Court (First Section)", 
                    "Court (First Section)", "Court (First Section)", "Court (First Section)", 
                    "Court (First Section)", "Court (Third Section)", "Court (Third Section)", 
                    "Court (Third Section)", "Court (Second Section)", "Court (Fourth Section Committee)", 
                    "Court (Third Section)", "Court (Third Section)", "Court (Third Section)", 
                    "Court (Second Section)", "Court (Second Section)", "Court (Second Section)", 
                    "Court (Second Section)", "Court (Second Section Committee)", "Court (Second Section)", 
                    "Court (Second Section)", "Court (Second Section)", "Court (Second Section)")

我尝试用 ifelse 语句来做到这一点,

df$origin.simple <- ifelse(df$Originating_body =="Court (Grand Chamber)"|
                         df$Originating_body == "Court (Plenary)", "Grand Chamber", 
                ifelse(df$Originating_body =="Court(Fifth Section)"|
                          df$Originating_body == "Court(Fourth Section)"|
                          df$Originating_body == "Court(Third Section)"|
                          df$Originating_body == "Court(Second Section)"|
                          df$Originating_body == "Court(First Section)"|
                          df$Originating_body == "Court(Chamber)", "Chamber", "Committee"))

但是出了问题,“Grand Chamber”似乎是正确的,但我最终得到了“Committee”,而我想要的是“Chamber”,所以 R 忽略了 ifelse 语句的第二部分并转换了“Court(第五部分)”, “法院(第四组)”、“法院(第三组)”、“法院(第二组)”、“法院(第一组)”和“法院(分庭)”改为“委员会”而不是“法院”。

我确信我犯了一个明显的错误,但我似乎找不到它。我也尝试过使用 grepl(ifelse()) 而不是 ifelse() 但没有成功。非常感谢您的帮助,提前谢谢您。

r if-statement rstudio
1个回答
0
投票

将数据框导入对象

df
:

df <- read.table("clipboard", sep = "\t", header = TRUE)

准备类别,请注意这里有拼写错误,这可能是问题的主要原因:

GrandChamber <- c("Court (Grand Chamber)", 
                  "Court (Plenary)")

Chamber <- c("Court (Chamber)", 
             "Court (Fifth Section)", 
             "Court (First Section)", 
             "Court (Fourth Section)", 
             "Court (Second Section)", 
             "Court (Third Section)")

Committee <- c("Court (Fifth Section Committee)",# fixed missing brace
               "Court (First Section Committee)",
               "Court (Fourth Section Committee)", # fixed missing brace
               "Court (Second Section Committee)", # fixed missing brace
               "Court (Third Section Committee)") # fixed missing brace

嵌套

ifelse()
版本:

df$new <- ifelse(df$Originating_body %in% GrandChamber, "Grand Chamber",
                 ifelse(df$Originating_body %in% Chamber, "Chamber",
                 ifelse(df$Originating_body %in% Committee,"Committee", "ERROR")))

我首选使用

dplyr
case_when()
的方法:

df$new <- dplyr::case_when(df$Originating_body %in% GrandChamber ~ "Grand Chamber",
                         df$Originating_body %in% Chamber ~ "Chamber",
                         df$Originating_body %in% Committee ~ "Committee"
                 )

使用命名向量和子集(感谢@Onyambu):

lookups <- c("Court (Grand Chamber)" = 'Grand Chamber', 
             "Court (Plenary)" = 'Grand Chamber',
             "Court (Chamber)" = 'Chamber',
             "Court (Fifth Section)"= 'Chamber', 
             "Court (First Section)"= 'Chamber', 
             "Court (Fourth Section)"= 'Chamber', 
             "Court (Second Section)"= 'Chamber', 
             "Court (Third Section)"= 'Chamber',
             "Court (Fifth Section Committee)" = 'Committee',
             "Court (First Section Committee)" = 'Committee',
             "Court (Fourth Section Committee)" = 'Committee',
             "Court (Second Section Committee)" = 'Committee',
             "Court (Third Section Committee)" = 'Committee')

df$new <- lookups[df$Originating_body]

每种方法都给出

                  Originating_body origin.simple           new
1           Court (Second Section)       Chamber       Chamber
2           Court (Second Section)       Chamber       Chamber
3           Court (Second Section)       Chamber       Chamber
4           Court (Fourth Section)       Chamber       Chamber
5            Court (Third Section)       Chamber       Chamber
6  Court (First Section Committee)     Committee     Committee
7  Court (Third Section Committee)     Committee     Committee
8  Court (Fifth Section Committee)     Committee     Committee
9                  Court (Chamber)       Chamber       Chamber
10                 Court (Plenary) Grand Chamber Grand Chamber
11           Court (Grand Chamber) Grand Chamber Grand Chamber
© www.soinside.com 2019 - 2024. All rights reserved.