【问题标题】:Aggregate (function = mean) for duplicate sample ID, but keep string columns重复样本 ID 的聚合(函数 = 平均值),但保留字符串列
【发布时间】:2019-11-22 15:55:49
【问题描述】:

我想对具有重复样本 ID 的样本的数值列进行平均,而不丢失字符串列。

我已经设法使用聚合函数对重复的样本 ID 取平均值,但首先我必须从数据集中删除非数字列才能使其正常工作。我想保留这些描述性的列。

创建一个假数据集:

ID<-c("QYZ","MMM","QYZ","bb2","gm6","gm6","YOU","LLL","LLL","LLL")
values<-c(1,2,4,5,5,6,8,9,6,4)
Levels<-c("A","B","A","C",'D','D',"C","y","y","y")

Exampledata<-data.frame(ID,values,Levels)

这是我尝试过的代码:

Exampledata2<- aggregate(Exampledata[,-3], by = list(Exampledata$ID), mean, na.rm=TRUE) 

Exampledata2 在代码之后是这样的:

  Group.1 ID   values

    bb2 NA 5.000000
    gm6 NA 5.500000
    LLL NA 6.333333  
    MMM NA 2.000000
    QYZ NA 2.500000
    YOU NA 8.000000

但我希望它看起来像这样:

 ID    values    Levels
  MMM      2      B
  QYZ      2.5    A
  bb2      5      C
  gm6      5.5    D
  YOU      8      C
  LLL      6.33   y

请注意,重复的样本 ID 之间的级别是相同的。

【问题讨论】:

    标签: r aggregate mean categorical-data


    【解决方案1】:

    这就是你要找的吗?如果您希望它继续下去,我看起来您需要在您的分组声明中包含级别。

    aggregate(Exampledata["values"], by = list(ID = ID, Levels = Levels), mean, na.rm=TRUE)
    

    data.table 也是这样

    as.data.table(Exampledata)[, .(values = mean(values)), .(ID, Levels)]
    

    【讨论】:

    • 您还可以将dplyr 示例添加为:Exampledata %&gt;% group_by(ID, Levels) %&gt;% summarise(values = mean(values, na.rm = TRUE))
    • 谢谢!是的,我没有意识到您可以向 by(list=
    • 或许aggregate的公式接口在这方面值得一提。 aggregate(values ~ ID + Levels, Exampledata, mean)
    猜你喜欢
    • 2018-07-30
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多