这些数据来自一组发展中国家的大型调查。除其他外,数据包括每个受访者所在国家和地区(国内)的变量。
唯一的问题是,不是将本地区域编码为字符串(例如“纽约”或“威彻斯特郡”),而是编码为数字,它对应于中的区域列表码本。
我想知道的是,是否有一种方法可以使用代码簿中的代码列表自动重新命名因子。每个区域前面都有一个数值和一个等号,后面紧跟一个逗号。
此列表采用以下形式:
1=New York, 2=Paris, 3=London, 4=Moscow, 5=Boston, ..., 230=Tblisi
是否有一些R代码可以让我使用此列表快速重命名此变量中的所有因子?
答案 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