r语言 - 在发生变化时将if语句与case合并



我有以下表格:

df_test <-data.frame(player = c('a', 'b', 'c', 'd', 'e'),
position = c('G', 'F', 'F', 'G', 'G'),
points = c(9, 15, 19, 22, 32),
rebounds = c(5, 7, 7, 12, 11))

假设我想添加名为rating的新列。新列的规则如下:

  1. 检查点数是否大于10
  2. 然后,执行case_when来检查其他变量:-当篮板>=7时,我们加上>平均值"到可变评级-当篮板>=10时,我们加上"good"到可变评级-其他,NA

要实现这一点,我使用以下代码:

df_test%>% mutate(new=if(points>=20){
case_when(rebounds>=7~"good",
rebounds>10~"best")
})

然而,这给了我以下错误:条件有长度>1 .

如何将if和case_when组合在同一个mutate语句中,或者是否有可能在case_when语句中写入case_when语句?

可以在case_when中添加多个条件

library(dplyr)
df_test <-data.frame(player = c('a', 'b', 'c', 'd', 'e'),
position = c('G', 'F', 'F', 'G', 'G'),
points = c(9, 15, 19, 22, 32),
rebounds = c(5, 7, 7, 12, 11))
df_test %>% 
mutate(
rating = case_when(
points > 10 & rebounds >= 10 ~ "good",
points > 10 & rebounds >= 7  ~ "average",
TRUE ~ NA_character_
)
)
player position points rebounds  rating
1      a        G      9        5    <NA>
2      b        F     15        7 average
3      c        F     19        7 average
4      d        G     22       12    good
5      e        G     32       11    good

是的,你也可以添加另一个case_when

df_test %>% 
mutate(
rating = case_when(
points > 10 ~ case_when(
rebounds >= 10 ~ "good",
rebounds >= 7  ~ "average"
),
TRUE ~ NA_character_
)
)

最新更新