R:跨多个文件对一个因素的级别进行分组

标签 r aggregate plyr

我是 R 的新手,在计算均值之前很难对一个因子的多个水平进行分组。这个问题很复杂,因为我正在对数百个文件执行此操作,这些文件具有需要分组的不同级别的因素。我从以前的帖子中了解到如何使用 levels () 解决单个级别的分组问题,但我的数据对于这种方法来说变化太大。

基本上,我想计算一个因素的多个水平的个体平均值和总体平均值。例如,我想计算 Status 列中以下每个因素的每个物种的平均值:Crypt1、Crypt2、Crypt3、Native、Intro,然后还有 Crypt 物种的总体平均值(包括 Crypt1、Crypt2、和 Crypt3,但不是 Native 或 Intro)。然而,一个物种要么具有多个级别的 Crypt(可变,最高为 Crypt8),要么具有 Native 和 Intro,并且每个级别的所有物种的均值最终平均到同一个摘要表中。

例如:

Species  Status  Value
A        Crypt1    5 
A        Crypt1    6
A        Crypt2    4
A        Crypt2    8
A        Crypt3    10
A        Crypt3    50
B        Native    2
B        Native    9
B        Intro     9
B        Intro     10

我想我可以使用每个因子的第一个字母将 Crypt 因子组合在一起,但我很难找到第一个字母,因为它们是因子,而不是字符串,而且我不确定如何在它们之间进行转换.我最终使用 aggregate() 计算均值,我可以获得每个因子的单独均值,但不能获取分组因子的均值。 任何想法将不胜感激,谢谢!

最佳答案

对于个人意味着:

# assuming your data is in data.frame = df
require(plyr)
df.1 <- ddply(df, .(Species, Status), summarise, ind.m.Value = mean(Value))

> df.1
#   Species Status ind.m.Value
# 1       A Crypt1     5.5
# 2       A Crypt2     6.0
# 3       A Crypt3    30.0
# 4       B  Intro     9.5
# 5       B Native     5.5

对于总体平均值,想法是使用 sub/gsub 删除 Status 中每个条目末尾的数字。

df.1$Status2 <- gsub("[0-9]+$", "", df.1$Status)
df.2 <- ddply(df.1, .(Species, Status2), summarise, oall.m.Value = mean(ind.m.Value))

> df.2
#   Species Status2 oall.m.Value
# 1       A   Crypt     13.83333
# 2       B   Intro      9.50000
# 3       B  Native      5.50000

这是您期望的吗?

关于R:跨多个文件对一个因素的级别进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011986/

相关文章:

r - 使用对应 ID 名称的 3 个阈值条件对数据帧进行子集化

r - 如何对 R 中的特定列执行 log2 转换

r - 读取 CSV 行子集的最快方法

ruby-on-rails - 从不同实例中查找时间总和

PostgreSQL - 聚合系列间隔 2 年

R Shiny 的 slider 增量

sql - Oracle SQL 条件求和

R:在数据框的子集中查找列的最大值

ddply(plyr)中的R汇总函数以简单的方式

r - 当并非所有组合都存在时,使用 ddply 进行总结