具有多个选择条件的嵌套 ifelse 语句

时间:2021-03-29 23:11:47

标签: r if-statement

<头>
夏令时
0 2020
1 2020
2 2020
3 2020
4 2020
5 2020
6 2020
7 2020
8 2020
9 2020
10 2020
0 2021
1 2021
2 2021
3 2021
4 2021
5 2021
6 2021
7 2021
8 2021
9 2021
10 2021

我有一个数据框 ('df'),我想在其中创建一个新列 ('Students'),其中 'ns' 表示没有学生,而 's' 表示学生。然而,“ns”和“s”出现的位置在基于“YDST”的年份之间有所不同。例如,在 2020 年,'ns' 应该从 0-3 和 9-10 表示。 2021年,'ns'应从'1-4'、'6-7'和'9-10'表示。

如何编写嵌套的 ifelse 语句,不仅要考虑“年份”,还要考虑年份之间不同的“YDST”选择标准?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用 ifelse 语句检查条件并分配值 'ns''s'

transform(df, students = ifelse(Year == 2020 & YDST %in% c(0:3, 9, 10) | 
                           Year == 2021 & YDST %in% c(1:4, 6:7, 9:10), 'ns','s'))

#   YDST Year students
#1     0 2020       ns
#2     1 2020       ns
#3     2 2020       ns
#4     3 2020       ns
#5     4 2020        s
#6     5 2020        s
#7     6 2020        s
#8     7 2020        s
#9     8 2020        s
#10    9 2020       ns
#11   10 2020       ns
#...
#...

数据

df <- structure(list(YDST = c(0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), Year = c(2020L, 
2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 
2020L, 2021L, 2021L, 2021L, 2021L, 2021L, 2021L, 2021L, 2021L, 
2021L, 2021L, 2021L)), row.names = c(NA, -22L), class = "data.frame")

答案 1 :(得分:0)

我们可以创建一个键/值数据集并进行连接

library(dplyr)
keyval <- data.frame(Year = rep(c(2020, 2021), c(5, 8)) 
        val = c(0:3, 9:10, 1:4, 6:7, 9:10))
left_join(df, keyval) %>%
       mutate(Students = case_when(YDST %in% val ~ 'ns', TRUE ~ 's'), val = NULL)
相关问题