2016-01-09 114 views
1

我的數據

的數據是從一組發展中國家的一項大型調查。數據包括每個受訪者國家和地區(國內)的變量。重命名的因素,從列表(R)

唯一的問題是,而不是編碼局部區域作爲字符串(如「紐約」或「威徹斯特縣」,其編碼數字,其對應於碼本區域的列表。

我的問題

我想知道的是,是否有自動重命名使用從碼本編碼表的因素的過程的方式,每個區域由一個數值之前和等號,並用逗號緊跟。

此列表採取這種形式:

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

是否有一些R代碼,可能允許我使用此列表快速重命名此變量中的所有因素?

+0

貴 「清單」 只存在於一個文本文件?或者它是一個R對象? – jbaums

+1

Hi @jbaums,感謝您的反饋。我想確保提供足夠的信息來提出問題的背景。要回答您的問題,該列表存在於文本文件中。 – Yasha

回答

2

如果你有一個像向量

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

你將不得不做一些正則表達式來提取數字城市的文本文件。例如,你可以這樣做:

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)) 

假設你有一個名爲「CityNum」,其中列出了數邁德特列...

MyData <- merge(MyData, Cities, by = CityNum) 

我必須用大約是簡潔jbaums同意。 :-)

+0

親愛的@LauraS,感謝您的回覆。該清單採用我在原文中指定的格式。我希望能夠在不重新輸入每個值或手動添加引號的情況下刮取數據。 – Yasha

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 
+0

嗨@Jay,非常感謝您的反饋。我現在會嘗試。 – Yasha