使用as.factor而不是plyr和ddply来对R中的变量进行分组?

mik*_*sey 3 r plyr

抱歉,这是一个经验丰富的R用户会知道的东西,但我刚刚遇到这个问题并想询问正确的用法.

似乎可以通过使用来对变量的范围进行分类as.factor.所以,我可以将观察分组到一个范围内.例如,如果我正在查看用户的访问,则看起来我可以编写if/then语句来按用户访问的范围对用户进行分区,然后根据组获取摘要统计信息.

以下是我了解到这一点的链接:http://programming-r-pro-bro.blogspot.com/2011/10/modelling-with-r-part-2.html

现在,虽然这个函数看起来比使用plyr和分组数据更容易ddply,但它看起来不够强大,无法将变量分解为X个二进制数(例如十分位数) - 你必须自己做.

这导致了我的问题 - 对于数据分组是一个比另一个好,还是有很多方法可以解决这样的分组问题?

谢谢

Aar*_*ica 8

我认为这cut是一个更好的工具.

有一些样本数据:

set.seed(123)
age <- round(runif(10,20,50))
Run Code Online (Sandbox Code Playgroud)

这就是我要做的:

> 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]
Run Code Online (Sandbox Code Playgroud)

(可选)手动设置因子标签:

> 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+
Run Code Online (Sandbox Code Playgroud)

相比之下,链接页面表明:

> 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+
Run Code Online (Sandbox Code Playgroud)