我有一个包含许多列的大型数据集,包括周数(即 1、2、3)和工作日(“星期一”、“星期二”等)。有些周可能只有一两个工作日的数据。我只需要选择或标记具有“完整”数据的周,即至少一个星期一、星期二、星期三、星期四和星期五。
我尝试创建一个 for 循环,对于每个周数,将测试该周是否至少包含列表“工作日”中的每个元素之一。我创建了一个新专栏,将标记满足该要求的每周(此处为第一周)。但是,for 循环未按预期工作,因为返回的所有标志均为“0”,而我预计第 1 周为“1”。
week_num <- c(1,1,1,1,1,2,2,2,3,3,3,3)
day <- c("Monday", "Tuesday", "Thursday", "Wednesday", "Friday", "Friday", "Sunday", "Saturday", "Thursday", "Wednesday", "Tuesday", "Sunday")
reprex <- data.frame(cbind(week_num, day))
weekdays <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
for (i in unique(reprex$week_num)){
reprex$flag = if_else(all(reprex$day %in% weekdays), 1, 0)
}
提前感谢您的帮助;我认识到我错过了一些明显的事情/可能有更好的方法来做到这一点。干杯
这是使用
dplyr
包的选项:
library(dplyr)
reprex |>
mutate(flag = all(weekdays %in% day), .by = week_num)
输出
week_num day flag
1 1 Monday TRUE
2 1 Tuesday TRUE
3 1 Thursday TRUE
4 1 Wednesday TRUE
5 1 Friday TRUE
6 2 Friday FALSE
7 2 Sunday FALSE
8 2 Saturday FALSE
9 3 Thursday FALSE
10 3 Wednesday FALSE
11 3 Tuesday FALSE
12 3 Sunday FALSE