从列表中重命名因子(在R中)

时间:2016-01-09 03:12:53

标签: r rename

我的数据

这些数据来自一组发展中国家的大型调查。除其他外,数据包括每个受访者所在国家和地区(国内)的变量。

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

我的问题

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

此列表采用以下形式:

1=New York, 2=Paris, 3=London, 4=Moscow, 5=Boston, ..., 230=Tblisi

是否有一些R代码可以让我使用此列表快速重命名此变量中的所有因子?

2 个答案:

答案 0 :(得分:2)

如果您的文本文件中包含

这样的矢量
 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 <- merge(MyData, Cities, by = CityNum)

假设您在MyData中有一个名为&#34; CityNum&#34;列出了数字......

SELECT      City, BedTypeDesc, HotelName, HotelID 
FROM     BedTypes,     Hotels,     Cities,     Rooms 
WHERE     Hotels.CityID = Cities.CityID         AND Hotels.HotelID = Rooms.HotelID          AND Rooms.BedTypeID = BedTypes.BedTypeID         AND BedTypeDesc = 'King Size'         AND City = 'Melbourne' 

我必须同意关于简洁的jbaums。 : - )

答案 1 :(得分:1)

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

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)

给出了:

[1] London   New York Paris    Moscow   London   Boston   New York New York New York
[10] Boston  
Levels: New York Paris London Moscow Boston