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
我有一个名为 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