如何在r中的数据帧中对字符向量进行分组

时间:2015-10-21 20:16:01

标签: r

我有一个我想要分组的数据框,所以我可以对每个组做一些基本的统计。但是,由于我用于分组的列是一个字符向量,我在尝试完成此操作的各种尝试中都没有成功。这是一个样本

    Name Value rate
1  SW115    25    3
2  SW115    34    3
3  SW115    25    3
4  SW115    30    3
5  SW115    36    3
6  SW345    32    4
7  SW345    43    4
8  SW345    35    4
9  SW345    24    4
10 SW345    23    4
11 SW445    32    5
12 SW445    33    5
13 SW445    24    5
14 SW445    35    5
15 SW445    25    5

正如我所说,我想按“名称”对其进行分组,并找出每组的“价值”的均值和简历。因此,在我的例子中,SW115将是一个组,SW345将是另一个组,我想知道每个组的平均值,sd和变异系数。我可以通过子集手动完成此操作,但我正在工作的原始数据有超过5000行,包含大约57个可能的组,并且需要花费数小时来手动完成每个组。我知道必须有一种方法可以通过几行代码来完成它,这样它就可以为每个组提供一次总结。

我尝试将列“name”转换为数字(以便每个组都有一个数字),但我也无法完成它。

任何建议都将不胜感激

2 个答案:

答案 0 :(得分:1)

使用dplyr,这非常简单。

library(dplyr)

x <- [YOUR DATA SET]

x %>%
  group_by(Name) %>%
  dplyr::summarise(mean = mean(Value),
                   sd = sd(Value)) %>%
  mutate(cv = (sd/mean)*100)

答案 1 :(得分:1)

创建数据:

name <- c(rep("SW115", 5), rep("SW345", 5), rep("SW445", 5))
Value <- c(25,34,25,30,36,32,43,35,24,23,32,33,24,35,25)
rate <- c(rep(3, 5), rep(4, 5), rep(5, 5))
df <- data.frame(name, Value, rate)

这就是你想要的:

aggregate(df[,2:3], list(df$name), mean )
aggregate(df[,2:3], list(df$name), sd )

您想要的统计数据。