dplyr和group_by:因子与无因子

时间:2014-07-03 13:29:01

标签: r dplyr

描述的行为是一个错误!

我不明白group_by对作为因素而非作为因素的列的影响。以下分析了两种可能性:

library(dplyr)

df <- data.frame(value=seq(1,10), height=c(rep(1,5),rep(2,5)))

# height is no factor
dfs <- df %>% group_by(height) %>% summarize(m=mean(value))
dfs$height==dfs$height[1]

# height is factor
df$height <- as.factor(df$height)
dfs <- df %>% group_by(height) %>% summarize(m=mean(value))

这里是一个数据框

   value height
1      1      1
2      2      1
3      3      1
4      4      1
5      5      1
6      6      2
7      7      2
8      8      2
9      9      2
10    10      2

按高度汇总。当df$height不是因素时,结果如下所示:

  height        m
1      1 4.500000
2      1 3.000000
3      1 2.000000
4      1 1.000000
5      2 9.000000
6      2 6.000000
7      2 8.333333

如果df$height是一个因素,结果就是我想要的结果:

  height m
1      1 3
2      2 8

为什么会发生这样的事情?我的第一个猜测是它是一个数值问题,而非因子height的差别很小。但是,上面的测试显示所有height==1都相同:

> dfs$height==dfs$height[1]
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE

好吧,好吧,我可以使用因子但是我放松了高度的数字特征。例如,我想按高度排序或选择最高的高度。

1 个答案:

答案 0 :(得分:1)

根据我对group_by的理解,它适用于任何变量类型,而不仅限于因素。根据{{​​3}}和我自己的尝试进行复制,应该解决此问题。