【发布时间】:2018-04-16 00:47:22
【问题描述】:
我有一个 tibble,Agencies,有如下两列:
> head(Agencies, 10)
# A tibble: 10 x 2
AgencyNumber State
<int> <chr>
1 1 AR
2 2 Arkansas
3 3 Texas
4 4 Texas
5 5 TX
6 6 IL
7 7 Illinois
8 8 Illinois
9 9 IL
10 10 IL
我正在尝试添加具有完整州名的列 (Agencies$STATE)。如果 Agencies$State 是缩写,则应使用 abbr2state 函数将全名保存到新列中。如果 Agencies$State 已经有了全名,它应该将 Agencies$State 的值存储到新列中。
我正在使用以下代码:
Agencies$STATE <- "NA"
for(i in 1:nrow(Agencies)) {
if(nchar(Agencies$State[i] == 2)) {
Agencies$STATE[i] <- abbr2state(Agencies$State[i])
}
else {
Agencies$STATE[i] <- Agencies$State[i]
}
}
输出是意外的。它似乎按预期评估了第一个 if 语句,但忽略了 else 语句。
> head(Agencies, 10)
# A tibble: 10 x 3
AgencyNumber State STATE
<int> <chr> <chr>
1 1 AR Arkansas
2 2 Arkansas <NA>
3 3 Texas <NA>
4 4 Texas <NA>
5 5 TX Texas
6 6 IL Illinois
7 7 Illinois <NA>
8 8 Illinois <NA>
9 9 IL Illinois
10 10 IL Illinois
我对 R 有点陌生,所以这可能是一个明显的错误,但我错过了它。
关于为什么这不符合我的预期的任何建议?
谢谢, 杰夫
【问题讨论】:
-
不是您问题的直接答案,但您不应该在 R 中对此类操作使用循环。也许可以尝试类似
Agencies$STATE <- ifelse(nchar(Agencies$State) == 2, abbr2State(Agencies$State), Agencies$State)(未经测试的代码) -
检查 nchar 上的括号
-
并且您应该在问题中包含您正在使用的任何库。例如,
abbr2state函数在哪个库中? -
nchar(Agencies$State[i] == 2) (nchar(Agencies$State[i]) == 2) 你放错了括号
-
应该作为错字关闭。
标签: r for-loop if-statement