R-比较if循环中的hhmm格式数据

R-Compare hhmm format data in if loop

我有一个名为 df 的数据框,如下所示。

ID HHmm
1  0840
2  0910
3  1050
4  1210
5  1230

我想添加第三列类型,它遵循以下规则:

  for (k in 1 : nrow(df)){
    if(df$HHmm >= 0860 & df$HHmm <= 1060){
      df[k, 'type'] = "r1"
    }else{
      df[k, 'type'] = "c"
    }
  }

但我收到警告:

In if (df$HHmm >= 0860 & df$HHmm <= 1060) { ... :
  the condition has length > 1 and only the first element will be used

我得到了一个不理想的结果,如下所示。

ID HHmm type
1  0840 r1
2  0910 r1
3  1050 r1
4  1210 r1
5  1230 r1

理想的结果应该如下所示

ID HHmm type
1  0840 c
2  0910 r1
3  1050 r1
4  1210 c
5  1230 c

谁能看出这里出了什么问题?如何在if循环中比较HHmm时间格式数据?

您需要定义索引k;例如df$HHmm[k].

  for (k in 1:nrow(df)){
    if(df$HHmm[k] >= 0860 & df$HHmm[k] <= 1060){
      df[k, 'type'] = "r1"
    }else{
      df[k, 'type'] = "c"
    }
  }

您不需要(也不应该)使用循环在 R 中执行此类操作。它更慢、更冗长且更难理解。

您只想创建一个名为 type 且值为“c”的列,然后将值“r1”分配给满足您条件的列的子集:

df$type  <- "c"
df$type[df$HHmm >= 0860 & df$HHmm <= 1060]  <- "r1"
df

# Output
#   ID HHmm type
# 1  1  840    c
# 2  2  910   r1
# 3  3 1050   r1
# 4  4 1210    c
# 5  5 1230    c