我有一个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语言还不是很熟悉,所以可能会出现一些明显的错误,但是我还没有发现。
你有什么建议吗?为什么我的代码没有达到我预期的效果?
谢谢, Jeff
Agencies$STATE <- ifelse(nchar(Agencies$State) == 2, abbr2State(Agencies$State), Agencies$State)
的代码(未经测试)。 - SymbolixAUabbr2state
函数在哪个库中? - SymbolixAU