R语言 如何创建循环以更改字典中特定行的值

whhtz7ly  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(101)

我是新来的,想不出怎么解决这个问题。我有一个数据。帧=时间表
| 周数|启动时间|结束日期|
| - -|- -|- -|
| 一个|上午9时|下午3点|
| 一个|上午9时|下午3点|
| 一个|上午9时|下午3点|
| 一个|上午9时|下午3点|
| 一个|上午9时|下午3点|
| 一个|不适用|不适用|
| 一个|不适用|不适用|
| 2个|上午9时|下午3点|
| 2个|上午9时|下午3点|
| 2个|上午9时|下午3点|
| 2个|上午9时|下午3点|
| 2个|上午9时|下午3点|
| 2个|不适用|不适用|
| 2个|不适用|不适用|
| 三个|上午9时|下午3点|
| 三个|上午9时|下午3点|
| 三个|上午9时|下午3点|
| 三个|上午9时|下午3点|
| 三个|上午9时|下午3点|
| 三个|不适用|不适用|
| 三个|不适用|不适用|
| - ----|||
| 我的天|||
| 五十二|||
| - ----|||
我有一本轮班字典:

> start_vec <- c("06:00", "08:00", "14:00")
> end_vec <- c("14:00", "16:00", "22:00")

我的循环是遍历所有52周,并将9am和3 pm替换为字典值。但问题是这些值不应重复,即每周应不同。
例如,我用以下内容开始一年:08:00 - 16:00。一年可以从任何班次开始。请查看以下示例:
| 周数|启动时间|结束日期|
| - -|- -|- -|
| 一个|上午8时|16点整|
| 一个|上午8时|16点整|
| 一个|上午8时|16点整|
| 一个|上午8时|16点整|
| 一个|上午8时|16点整|
| 一个|不适用|不适用|
| 一个|不适用|不适用|
| 2个|下午2点|22点整|
| 2个|下午2点|22点整|
| 2个|下午2点|22点整|
| 2个|下午2点|22点整|
| 2个|下午2点|22点整|
| 2个|不适用|不适用|
| 2个|不适用|不适用|
| 三个|上午6时|下午2点|
| 三个|上午6时|下午2点|
| 三个|上午6时|下午2点|
| 三个|上午6时|下午2点|
| 三个|上午6时|下午2点|
| 三个|不适用|不适用|
| 三个|不适用|不适用|
| - ----|||
| 我的天|||
| 五十二|||
| - ----|||
我尝试制作嵌套循环,或者制作week_number向量,以便能够用特定值替换所有不带NA的1。

> rd_dt <- data.frame()
> for (i in 1:length(schedule$Week_number)){
> for (s in start_vec){
> for (e in end_vec){
> dt <- schedule[i,] 
> if (schedule$Start == NA){
> next
> else {

提前感谢您的任何提示。

tkclm6bt

tkclm6bt1#

我认为你不需要一个循环来完成这个任务。这里有一个方法可能会有帮助。使用ifelse检查NA-如果 * 不是 * NA,那么参考start_vecend_vec来替换值。它将使用Week_number作为向量中的索引,并使用%%模运算符,其中3是向量的长度。因此如果超过了向量的长度,则它将从开始处重新开始。

library(dplyr)

df %>%
  mutate(Start = ifelse(is.na(Start), NA, start_vec[1 + Week_number %% 3]),
         End = ifelse(is.na(End), NA, end_vec[1 + Week_number %% 3]))

输出

Week_number Start   End
1            1 08:00 16:00
2            1 08:00 16:00
3            1 08:00 16:00
4            1 08:00 16:00
5            1 08:00 16:00
6            1  <NA>  <NA>
7            1  <NA>  <NA>
8            2 14:00 22:00
9            2 14:00 22:00
10           2 14:00 22:00
11           2 14:00 22:00
12           2 14:00 22:00
13           2  <NA>  <NA>
14           2  <NA>  <NA>
15           3 06:00 14:00
16           3 06:00 14:00
17           3 06:00 14:00
18           3 06:00 14:00
19           3 06:00 14:00
20           3  <NA>  <NA>
21           3  <NA>  <NA>

相关问题