r语言 - 嵌套if-else循环的问题



我非常在R编码的一开始,我一直试图扩展一个简单的if_else函数,我之前通过添加一个新的条件,但由于某种原因它不工作。

我以前有什么:

data2 <- data1 %>%
mutate (score = if_else (lev <= 1, 1, 0))

这是按预期工作-它正在创建一个"分数"列中基于"级别"中的值列-如果它们小于或等于1,则赋值1,否则赋值0。

接下来我想做的是通过添加一个新条件来扩展这个,其中得分将取决于另一个列("Wordclass"):

if (data2$Wordclass=="Preposition" || data2$Wordclass=="Noun") {
mutate (data2$score2 = if_else (data2$lev <= 1, 1, 0))
} else {
mutate (data2$score2 = if_else (data2$lev <= 3, 1, 0))
}

我试图用这段代码实现的是:如果Wordclass是介词或名词,那么与之前相同的评分条件将适用(level<=1),但如果Wordclass是其他任何东西,那么评分条件将不同(level<=3)。然而,我得到以下错误:

错误:unexpected '=' in "if (data2$Wordclass=="介词"||data2$Wordclass=="名词") {mutate (data2$score =">

我尝试了不同的组合和选项,并在网上寻找答案,但无法找到解决方案。我对此很陌生,所以我意识到这可能是一个非常明显的错误。如果有人能识别它并提供解决方案,我将不胜感激!

下面的例子可能会对您有所帮助:

数据
data <-
data.frame(
Wordclass = c("Preposition","Noun","Preposition","Noun","Other","Other"),
lev = c(0,1,1,0,2,5)
)

代码库(dplyr)

data %>% 
mutate(
score2 =  case_when(
(Wordclass== "Preposition" | Wordclass=="Noun") ~ if_else(lev <= 1, 1, 0),
TRUE ~ if_else(lev <= 3, 1, 0)
)
)

输出
Wordclass lev score2
1 Preposition   0      1
2        Noun   1      1
3 Preposition   1      1
4        Noun   0      1
5       Other   2      1
6       Other   5      0

最新更新