我有一个包含许多列的大型数据集,包括周号(即1、2、3)和工作日("星期一"、"星期二"等).有些星期可能只有一两个工作日的数据.我只需要 Select 或标记具有"完整"数据的周,即至少一个星期一、星期二、星期三、星期四和星期五.

我try 创建一个for循环,对于每个Week数字,它将测试该周是否至少包含列表"Weekday"中的每个元素中的一个.我制作了一个新的专栏,它将标记满足该要求的每一周(这里是第一周).然而,for循环并没有按预期工作,因为返回的所有标志都是"0",而我期望第一周的标志是"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)

Output

   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

关于你的try ,这里有几件事需要考虑:

你循环了unique(reprex$week_num),但是在for循环中,你没有使用索引变量i做任何事情.因此,for的每一次迭代都重复运行同一个表达式:

if_else(all(reprex$day %in% weekdays), 1, 0)

让我们看看这个表达式从内到外是做什么的:

# 1. Testing if reprex$day is found in vector weekdays
reprex$day %in% weekdays
 [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE

# 2. Test if every logical value is TRUE (which it is not)
all(reprex$day %in% weekdays)
[1] FALSE

# 3. Always returning FALSE then if_else returns 0
if_else(FALSE, 1, 0)
[1] 0

R相关问答推荐

给定R中另一行中的值,如何插补缺失值

将复杂的组合列表转换为数据框架

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

基于不同组的列的相关性

如何根据组大小应用条件过滤?

如何在R中合并和合并多个rabrame?

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

如何得到每四个元素向量R?

可以替代与NSE一起使用的‘any_of()’吗?

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

当我添加美学时,geom_point未对齐

R中Gamma回归模型均方误差的两种计算方法不一致

如何使用前缀作为匹配来连接数据帧?

根据r中每行中的日期序列,使用列名序列创建新列

Conditional documentr::R中数据帧的summarize()

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

R:使用ApexCharge更改标签在饼图中的位置

如何在不使用SHINY的情况下将下拉滤镜列表添加到ggploy?

从字符串01JAN2021创建日期