夏令时 | 年 |
---|---|
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”选择标准?
谢谢!
答案 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)