2015-05-01 26 views
0

我是一位新的R愛好者,致力於擴展我的知識。我正在閱讀An Introduction To Data Cleaning With R文章Edwin de JongeMark van der Loo。我正在練習2.4和我將不勝感激,如果有人可以證實我在解決這一特定問題的技術: 這是原始數據:使用字符串距離技術在R中創建因子變量

1 // Survey data. Created : 21 May 2013 
2 // Field 1: Gender 
3 // Field 2: Age (in years) 
4 // Field 3: Weight (in kg) 
5 M;28;81.3 
6 male;45; 
7 Female;17;57,2 
8 fem.;64;62.8 

這是一個更清潔的版本,我是能夠構建:

df: 
Gender Age..in.years. Weight..in.kg. 
1  M    28   81.3 
2 male    45   <NA> 
3 Female    17   57,2 
4 fem.    64   62.8 

現在,這是我從使用adist

D: 
rawtext coded 
1  M male 
2 male male 
3 Female female 
4 fem. female 

重新編碼得到現在我必須將性別欄變成一個因素variabl與標籤男人和女人。 我不知道如何着手,我想改變數據的性別欄下面的列向量:

f <- factor(D$coded, levels = c("male", "female"), labels = c("man", "woman")) 

返回:

[1] man man woman woman 
    Levels: man woman 

我是正確或完全錯誤的?;有沒有一種方法可以使用transform來直接更改df中的Gender變量?即是它更好地做到:

df$Gender <- plyr::revalue(D$coded, c(male = "man", female = "woman")) 

或者是有另一種方式來改變性別變量「男人」或「女人」的意見,而無需使用多個ifesle命令?

我想通過學習更多的因素來獲得答案,但沒有什麼比這個彈出任何相似的地方。 謝謝。

+0

您應顯示數據,以便它是容易再現。這裏有一個參考:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Frank

+0

你能顯示'D $編碼'的結果嗎?級別排序有所作爲 –

+0

對不起,我不是StackOverFlow的專家。 D數據是第3個代碼塊。 – Buckeye14Guy

回答

1

f <- factor(D$coded, levels = c("male", "female"), labels = c("man", "woman")) 

沒有工作,但只是因爲你有lucky-也就是說,因爲D$coded的水平在順序c("male", "female")。如果他們的訂單不同,那麼男人和女人的標籤就會被換成新的因素。 (畢竟,你從來沒有指定在該行哪個級別應該去「男性」和以「女」!)

當重估的一個因素的水平,它的安全和易於使用的revalue函數從plyr包使用

f <- plyr::revalue(D$coded, c(male = "man", female = "woman")) 
+0

偉大的工作!謝謝。而且我遇到了一個問題,那裏的矢量<女人,女人,男人,男人>,這就是爲什麼我在f中引入了levels級別的參數來保持這個順序。會有一種方法來使用變換(gender = factor(df,levels = ...,labels = ...)),其中df是第二個代碼塊中的數據嗎? – Buckeye14Guy

+0

@ Buckeye14Guy第二個代碼塊,不,你需要使用'adist'從第二個代碼塊到第三個代碼塊。但是你說你已經這麼做了 –

-1

基R::

levels(f) <- list(man = "male", woman = "female") 
相關問題