我有以下表格:
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的新列。新列的规则如下:
- 检查点数是否大于10
- 然后,执行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_
)
)