2011-11-18 115 views
3

我有一個捐贈者和捐贈者姓名的數據框。R將名稱轉換爲數字

**donation**    **Donor** 
25.00    Steve Smith 
20.00    Jack Johnson 
50.00    Mary Jackson 
    ...     ... 

我試圖做使用pvclust包一些集羣。不幸的是,這個軟件包似乎沒有采用非數字數據。

> rs1.pv1 <- parPvclust(cl, rs1, nboot=10) 
Error in cor(x, method = "pearson", use = use.cor) : 'x' must be numeric 

我有兩個問題。

1)是否有另外一種包裝或方法可以做得更好?

2)有沒有辦法「正常化」捐助者名單?即得到一個唯一的捐助者名稱列表,分配每個id號碼,然後將id號碼插入數據框中以代替字符名稱。

+1

我強烈懷疑你**不**希望將這些名稱轉換爲數字和養活他們'parPvclust'。相反,從快速瀏覽'?parPvclust'和'?lung'中的例子,看起來應該使用'Donor'列作爲rownames屬性,然後將它從矩陣或data.frame中移除。 –

+0

@ JoshO'Brien:讓這個答案? –

+0

你能否更詳細地解釋你在這個例子中要做的事情?例如,你是否想要提供具有相似捐贈水平的捐贈者羣體(在這種情況下,我會試圖使用ave或plyr :: ddply來獲得每個捐贈者的平均捐贈額*然後*將他們聚集起來。 。) –

回答

5

對於2號:

#If donor is a factor then 

as.numeric(donor) 

#will transform your factor to numeric. 
#If it isn't, tranform it to a factor and the to numeric 
as.numeric(as.factor(donor)) 

不過,我不知道,改造捐款人名單,以一個數字,然後使用心病是有道理的。

HTH

+0

擊敗你11秒。你的意思是as.numeric(as.factor(donor))'..? –

+0

@BenBolker,是的,傻我! –

2

rs1 <- transform(rs1, Donor=as.numeric(factor(Donor)))怎麼樣? (警告:我沒有想過你在做什麼,足以知道這是否合理 - 所以我只回答問題2,而不是問題1)。通常Donor已經是一個因素(這是例如read.tableread.csv默認會做的),所以factor()部分將是多餘的。