聚合(函数 = 均值)重复样本 ID,但保留字符串列

Aggregate (function = mean) for duplicate sample ID, but keep string columns

我想对具有重复样本 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 之间的级别相同。

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

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

data.table

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