Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用as.factor而不是plyr和ddply对R中的变量进行分组?_R_Plyr - Fatal编程技术网

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

使用as.factor而不是plyr和ddply对R中的变量进行分组?,r,plyr,R,Plyr,很抱歉,这是一个经验丰富的R用户应该知道的,但我只是偶然发现了这一点,想问一下正确的用法 似乎可以使用作为.factor对变量范围进行分类。因此,我可以将观察结果分成一个范围。例如,如果我按用户查看访问,那么我可以编写一个if/then语句,根据用户的访问范围对其进行分类,然后根据组获取摘要统计信息 以下是我了解到这一点的链接: 现在,虽然此函数看起来比使用plyr和ddply对数据进行分组更容易,但它似乎没有足够的功能将变量分解为X个存储单元(例如10个存储单元表示十分位)-您必须自己完成这项

很抱歉,这是一个经验丰富的R用户应该知道的,但我只是偶然发现了这一点,想问一下正确的用法

似乎可以使用
作为.factor
对变量范围进行分类。因此,我可以将观察结果分成一个范围。例如,如果我按用户查看访问,那么我可以编写一个if/then语句,根据用户的访问范围对其进行分类,然后根据组获取摘要统计信息

以下是我了解到这一点的链接:

现在,虽然此函数看起来比使用
plyr
ddply
对数据进行分组更容易,但它似乎没有足够的功能将变量分解为X个存储单元(例如10个存储单元表示十分位)-您必须自己完成这项工作

这就引出了我的问题——在分组数据方面,一种方法比另一种好,还是有很多方法可以解决这样的分组问题


谢谢

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

使用一些示例数据:

set.seed(123)
age <- round(runif(10,20,50))
(可选)手动设置因子标签:

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

>作为.factor(ifelse(age
as.factor
只是将一个字符向量转换成一个因子-它本身不进行分析。
ddply
plyr
提供的套件中的一个强大工具。将
as.factor
ddply
进行比较有点像是将滚珠轴承与变速箱进行比较。您可能想看看
?剪切
。你可能还想用一个小例子来看看你想做什么,人们会更容易插话并向你展示一些更简单的方法。
cut()
就是其中之一。抱歉@Joris,我真的应该让人们在回答问题之前改进他们的问题。“cut”肯定比链接页面中说明的ifelse方法要好。请注意“cut”的include.lower参数。感谢您的建议。我明白为什么这可能是一种更好的方法。
> 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+