0

我有一个包含 25 个变量的数据框“QARef”。只有 5 个独特的作业(第 3 列),但每个作业有很多行:

str(QARef)'data.frame':648 obs。25 个变量:

我正在使用 tapply 为某些行生成所有 5 个作业的平均值:

RefMean <- tapply(QARef$MTN,
                  list(QARef$Target_CD, QARef$Feature_Type, QARef$Orientation, QARef$Contrast, QARef$Prox),
                  FUN=mean, trim=0, na.rm=TRUE)

我得到了一些我希望被称为多维列表的东西:

str(RefMean)
 num [1:17, 1:2, 1:2, 1:2, 1:2] 34.1 34.2 25.2 28.9 29.2 ...
 - attr(*, "dimnames")=List of 5
  ..$ : chr [1:17] "55" "60" "70" "80" ...
  ..$ : chr [1:2] "LINE" "SQUARE"
  ..$ : chr [1:2] "X" "Y"
  ..$ : chr [1:2] "CLEAR" "DARK"
  ..$ : chr [1:2] "1:1" "Iso"

我想要做的是向 QARef 添加一列,其中包含每行的正确 RefMean 值,具体取决于 QARef 列中的值和 RefMean 的暗名称之间的匹配。例如 QARef 列 Feature_Type=="LINE" 应该匹配暗名“LINE”等。

任何提示如何做到这一点或在哪里可以找到答案将不胜感激。

4

1 回答 1

0

我想我找到了解决方案。可能不优雅,但它有效:

RefMean <- data.frame(tapply(QARef$MTN,paste(QARef$Target_CD,QARef$Feature_Type,QARef$Orientation,QARef$Contrast,QARef$Prox,QARef$Measurement_Type),FUN=mean,trim=0,na.rm=TRUE))
colnames(RefMean) <- c("MTN_Ref")
Ident <- do.call(rbind, strsplit(rownames(RefMean), " "))
RefMean["Target_CD"] <- Ident[,1]
RefMean["Feature_Type"] <- Ident[,2]
RefMean["Orientation"] <- Ident[,3]
RefMean["Contrast"] <- Ident[,4]
RefMean["Prox"] <- Ident[,5]
RefMean["Measurement_Type"] <- Ident[,6]
QA4 <- merge(QARef,RefMean,by=c("Target_CD","Feature_Type","Orientation","Contrast","Prox","Measurement_Type"),all.x=TRUE,sort=FALSE)
于 2015-05-27T09:29:29.217 回答