我有一个大型文件,其变量状态具有完整的州名。我想用州缩写(即“纽约”为“纽约”)替换它。有没有一种简单的方法(除了使用几个if-else命令)?可能正在使用“替换”声明?感谢。
答案 0 :(得分:70)
R有两个可能有用的内置常量:state.abb
带有缩写,state.name
带有全名。这是一个简单的用法示例:
> x <- c("New York", "Virginia")
> state.abb[match(x,state.name)]
[1] "NY" "VA"
答案 1 :(得分:31)
1) grep
来自state.name
的全名,并用它来索引state.abb
:
state.abb[grep("New York", state.name)]
## [1] "NY"
1a)或使用which
:
state.abb[which(state.name == "New York")]
## [1] "NY"
2)或创建状态缩写的矢量,其名称是全名,并使用全名将其编入索引:
setNames(state.abb, state.name)["New York"]
## New York
## "NY"
与(1)不同,即使“纽约”被全州名称的矢量取代,例如, setNames(state.abb, state.name)[c("New York", "Idaho")]
答案 2 :(得分:6)
我发现内置的state.name和state.abb只有50个状态。我从在线获得了一个更大的表(包括DC等)(例如,此链接:http://www.infoplease.com/ipa/A0110468.html)并将其粘贴到名为States.csv的.csv文件中。然后我加载状态和缩写。从此文件而不是使用内置。其余的与@Aniko&#39>非常相似
{
"trace": [
{
"file": "/var/www/my-project/vendor/zfcampus/zf-rest/src/AbstractResourceListener.php",
"line": 166,
"function": "fetch",
"class": "FooAPI\\V1\\Rest\\Bar\\BarResource",
"type": "->",
"args": [
"1"
]
},
{
"function": "dispatch",
"class": "ZF\\Rest\\AbstractResourceListener",
"type": "->",
"args": [
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php",
"line": 444,
"function": "call_user_func",
"args": [
[
{},
"dispatch"
],
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php",
"line": 205,
"function": "triggerListeners",
"class": "Zend\\EventManager\\EventManager",
"type": "->",
"args": [
"fetch",
{},
{}
]
},
{
"file": "/var/www/my-project/vendor/zfcampus/zf-rest/src/Resource.php",
"line": 541,
"function": "trigger",
"class": "Zend\\EventManager\\EventManager",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/var/www/my-project/vendor/zfcampus/zf-rest/src/RestController.php",
"line": 483,
"function": "fetch",
"class": "ZF\\Rest\\Resource",
"type": "->",
"args": [
"1"
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractRestfulController.php",
"line": 366,
"function": "get",
"class": "ZF\\Rest\\RestController",
"type": "->",
"args": [
"1"
]
},
{
"file": "/var/www/my-project/vendor/zfcampus/zf-rest/src/RestController.php",
"line": 332,
"function": "onDispatch",
"class": "Zend\\Mvc\\Controller\\AbstractRestfulController",
"type": "->",
"args": [
{}
]
},
{
"function": "onDispatch",
"class": "ZF\\Rest\\RestController",
"type": "->",
"args": [
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php",
"line": 444,
"function": "call_user_func",
"args": [
[
{},
"onDispatch"
],
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php",
"line": 205,
"function": "triggerListeners",
"class": "Zend\\EventManager\\EventManager",
"type": "->",
"args": [
"dispatch",
{},
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php",
"line": 118,
"function": "trigger",
"class": "Zend\\EventManager\\EventManager",
"type": "->",
"args": [
"dispatch",
{},
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractRestfulController.php",
"line": 300,
"function": "dispatch",
"class": "Zend\\Mvc\\Controller\\AbstractController",
"type": "->",
"args": [
{},
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/Mvc/DispatchListener.php",
"line": 93,
"function": "dispatch",
"class": "Zend\\Mvc\\Controller\\AbstractRestfulController",
"type": "->",
"args": [
{},
{}
]
},
{
"function": "onDispatch",
"class": "Zend\\Mvc\\DispatchListener",
"type": "->",
"args": [
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php",
"line": 444,
"function": "call_user_func",
"args": [
[
{},
"onDispatch"
],
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php",
"line": 205,
"function": "triggerListeners",
"class": "Zend\\EventManager\\EventManager",
"type": "->",
"args": [
"dispatch",
{},
{}
]
},
{
"file": "/var/www/my-project/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php",
"line": 314,
"function": "trigger",
"class": "Zend\\EventManager\\EventManager",
"type": "->",
"args": [
"dispatch",
{},
{}
]
},
{
"file": "/var/www/my-project/public/index.php",
"line": 56,
"function": "run",
"class": "Zend\\Mvc\\Application",
"type": "->",
"args": []
}
],
"type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html",
"title": "Internal Server Error",
"status": 500,
"detail": "fetch_EXCEPTION"
}
匹配和匹配之间的差异在于它们如何计算从一个单词到另一个单词的距离。请参见P25-26 http://cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf
答案 3 :(得分:5)
我知道的老帖子,但是想把我扔进那里。我在tidyverse上学到了,所以无论好坏,我都尽可能避免使用R。我也想要一个DC,所以首先我建造了人行横道:
library(tidyverse)
st_crosswalk <- tibble(state = state.name) %>%
bind_cols(tibble(abb = state.abb)) %>%
bind_rows(tibble(state = "District of Columbia", abb = "DC"))
然后我加入了我的数据:
left_join(data, st_crosswalk, by = "state")
答案 4 :(得分:1)
如果您没有美国州名,也可以使用base::abbreviate
。除非您增加最小长度,否则这不会给您同样大小的缩写。
state.name %>% base::abbreviate(minlength = 1)
答案 5 :(得分:0)
如果您经常需要将州名与缩写或其他方式匹配,您可以将 Aniko 的解决方案放在 .Rprofile 或包中的函数中:
state_to_st <- function(x){
c(state.abb, 'DC')[match(x, c(state.name, 'District of Columbia'))]
}
st_to_state <- function(x){
c(state.name, 'District of Columbia')[match(x, c(state.abb, 'DC'))]
}
将该函数用作 dplyr 链的一部分:
enframe(state.name, value = 'state_name') %>%
mutate(state_abbr = state_to_st(state_name))