2011-10-31 69 views
3

道歉是這是一個更經驗豐富的R用戶會知道,但我只是碰到這個問題,想問一下正確的用法。使用as.factor而不是plyr和ddply來對R中的變量進行分組?

似乎有可能通過使用as.factor來分類變量的範圍。所以,我可以將觀察分成一個範圍。例如,如果我正在查看用戶的訪問,則看起來我可以編寫if/then語句來按用戶的訪問範圍對用戶進行分類,然後根據組獲得摘要統計信息。

這裏就是我得知這個鏈接:http://programming-r-pro-bro.blogspot.com/2011/10/modelling-with-r-part-2.html

現在,雖然這個功能看起來比使用plyrddply分組數據更容易,它看起來並不足夠強大到變量打入X號的箱子(例如十分之一) - 你必須自己做。

這導致了我的問題 - 對於分組數據,其中一個比另一個更好嗎,還是有很多方法可以解決這樣的分組問題?

感謝

+2

'as.factor'只是簡單地將一個字符向量轉換成一個因子 - 它本身不做任何分析。 'ddply'是'plyr'提供的套件中的強大工具之一。比較'as.factor'和'ddply'有點像比較球軸承和變速箱。 – Andrie

+2

你可能想看看''cut'。你可能也想看看http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example通過一個你想要做的小例子,人們會更多輕鬆插入,並向您展示一些更簡單的方法來做到這一點。 'cut()'就是其中之一。 –

+1

對不起@Joris,我真的應該讓人們在回答之前改進他們的問題。 – Aaron

回答

8

我覺得cut是這更好的工具。

有了一些樣本數據:

set.seed(123) 
age <- round(runif(10,20,50)) 

這是我會怎麼做:

> cut(age, c(0,30,40,Inf)) 
[1] (0,30] (40,Inf] (30,40] (40,Inf] (40,Inf] (0,30] (30,40] (40,Inf] 
[9] (30,40] (30,40] 
Levels: (0,30] (30,40] (40,Inf] 

可選,手動設定因素標籤:

> cut(age, c(0,30,40,Inf), labels=c('0-30', '31-40', '40+')) 
[1] 0-30 40+ 31-40 40+ 40+ 0-30 31-40 40+ 31-40 31-40 
Levels: 0-30 31-40 40+ 

要相比之下,鏈接頁面暗示了這一點:

> as.factor(ifelse(age<=30, '0-30', ifelse(age <= 40, '30-40', '40+'))) 
[1] 0-30 40+ 30-40 40+ 40+ 0-30 30-40 40+ 30-40 30-40 
Levels: 0-30 30-40 40+ 
+1

'cut'肯定比鏈接頁面中說明的ifelse方法更好。注意'cut'的include.lowest參數。 –

+0

感謝您的建議。我明白爲什麼這可能是更好的方法來處理它。 – mikebmassey

相關問題