dplyr的汇总函数不会按行为多列输出正确的结果

时间:2017-08-01 22:31:48

标签: r dplyr

我有一个包含5列rachis1到rachis5的数据集是数字的。 我有100行数据,每行都附有名称作为因子。 我想对所有五列的每一行做一个摘要。

head(rl)
  name rachis1 rachis2 rachis3 rachis4 rachis5
1 R04-001     2.4     2.6     2.7     3.0     2.4
2 R04-002     7.0     7.4     7.7     6.8     7.4
3 R04-003     3.5     3.7     3.9     4.1     3.8
4 R04-004     9.5     9.1     7.8     8.8     8.2
5 R04-005     3.0     3.3     3.4     3.8     3.3
6 R04-006     9.2     9.8     9.5     9.4    10.1

我的代码是。

library(dplyr)
####Rachis
RL<- rl %>%
  group_by(name) %>% 
  summarize(RL= mean(rachis1:rachis5), RLMAX = max(rachis1:rachis5),RLMIN = 
  min(rachis1:rachis5), RLSTD=sd(rachis1:rachis5),na.rm=T)
head(RL)
tail(RL)

我的结果分析结果为......

 head(RL)
 # A tibble: 6 x 6
  name    RL RLMAX RLMIN     RLSTD na.rm
<fctr> <dbl> <dbl> <dbl>     <dbl> <lgl>

1  R04-001   2.4   2.4   2.4        NA  TRUE
2  R04-002   7.0   7.0   7.0        NA  TRUE
3  R04-003   3.5   3.5   3.5        NA  TRUE
4  R04-004   9.0   9.5   8.5 0.7071068  TRUE
5  R04-005   3.0   3.0   3.0        NA  TRUE
6  R04-006   9.2   9.2   9.2        NA  TRUE

我想知道为什么RLSTD中存在NA(标准偏差),而最小值和最大值不是行的混合和最大值。 是否有另一种收集描述性统计数据的方法?

2 个答案:

答案 0 :(得分:0)

我无法判断100行中是否有重复的行名称。如果您这样做,并且因为您已经拥有此格式的数据并使用tidyverse,那么这可能会有效。请注意,我已将na.rm参数放在各个统计函数调用中。

 RL<- rl %>%
      group_by(name) %>% 
              summarise(RL = mean(rachis1+rachis2+rachis3+rachis4+rachis5, na.rm=T),
                     RLMAX = max(rachis1+rachis2+rachis3+rachis4+rachis5, na.rm=T),
                     RLMIN = min(rachis1+rachis2+rachis3+rachis4+rachis5, na.rm=T),
                     RLSTD = sd(rachis1+rachis2+rachis3+rachis4+rachis5, na.rm=T))

答案 1 :(得分:0)

以下是使用dplyr汇总代码的结果。现在效果很好。

name    RL RLMAX RLMIN     RLSTD
 <fctr> <dbl> <dbl> <dbl>     <dbl>
 1  R04-001  2.62   3.0   2.4 0.2489980
 2  R04-002  7.26   7.7   6.8 0.3577709
 3  R04-003  3.80   4.1   3.5 0.2236068
 4  R04-004  8.68   9.5   7.8 0.6833740
 5  R04-005  3.36   3.8   3.0 0.2880972
 6  R04-006  9.60  10.1   9.2 0.3535534