首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从列表中重命名因素( R)

从列表中重命名因素( R)
EN

Stack Overflow用户
提问于 2016-01-09 03:12:53
回答 2查看 324关注 0票数 1

我的数据

这些数据来自一组发展中国家的一项大型调查。除其他外,这些数据包括每个答复国和地方区域(国内)的变量。

唯一的问题是,它不是将本地区域编码为字符串(例如“纽约”或“韦斯特切斯特县”),而是将其编码为数字,后者对应于码本中的区域列表。

我的问题

我想知道的是,是否有一种方法可以使使用代码本中的代码列表重新命名因素的过程自动化。每个区域前面都有一个数值和一个等号,后面紧跟着一个逗号。

这份清单采取以下形式:

代码语言:javascript
运行
复制
1=New York, 2=Paris, 3=London, 4=Moscow, 5=Boston, ..., 230=Tblisi

是否有一些R代码允许我使用这个列表快速地重命名这个变量中的所有因素?

EN

回答 2

Stack Overflow用户

发布于 2016-01-09 04:24:20

如果您有一个带有向量的文本文件,如

代码语言:javascript
运行
复制
 1=New York, 2=Paris, 3=London, 4=Moscow, 5=Boston, ..., 230=Tblisi

你需要做一些调整,从数字中提取城市。例如,您可以:

代码语言:javascript
运行
复制
 library(stringr)
 List <- c("1=New York", "2=Paris", "3=London", "4=Moscow", "5=Boston")
 Cities <- data.frame(Orig = List)
 Cities$CityNum <- str_extract(Cities$Orig, "[0-9]{1,}") # match the number at least once
 Cities$City <- str_sub(Cities$Orig, 
                   start = str_locate(Cities$Orig, "[A-Z]")[, 1],
                   end = str_length(Cities$Orig))

假设您在MyData中有一个名为"CityNum“的列,其中列出了数字.

代码语言:javascript
运行
复制
 MyData <- merge(MyData, Cities, by = CityNum)

我必须同意简明扼要的观点。:-)

票数 2
EN

Stack Overflow用户

发布于 2016-01-09 06:53:10

您可以在代码列表上使用strsplit,然后将结果用作您的因素的级别和标签。

代码语言:javascript
运行
复制
citylist <- c("1=New York", "2=Paris", "3=London", "4=Moscow", "5=Boston")
codes <- data.frame(do.call(rbind, strsplit(citylist, "="))) # Split and bind the result into a dataframe

set.seed(85)
mycities <- ceiling(runif(10, 0, 5))     # Generate some dummy data
mycities <- factor(mycities, levels = codes$X1, labels = codes$X2)

这意味着:

代码语言:javascript
运行
复制
[1] London   New York Paris    Moscow   London   Boston   New York New York New York
[10] Boston  
Levels: New York Paris London Moscow Boston
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34689320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档