R语言 合并数据.框架与多维列表

pdkcd3nj  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个数据框“QARef”whith 25个变量。只有5个唯一的作业(第3列),但每个作业有很多行:
string(QARef)'data. frame':25个变量的648个观测值:
我使用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的dimnames之间的匹配。例如,QARef列Feature_Type==“LINE”应匹配dimname“LINE”等。
任何提示如何做到这一点或在哪里找到答案将是高度赞赏。

xxhby3vn

xxhby3vn1#

我想我找到解决办法了。可能不太好,但很有效:

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)

相关问题