объединить data.frame с многомерным списком

У меня есть фрейм данных "QARef" с 25 переменными. Есть только 5 уникальных заданий (3-й столбец), но много строк на задание:

str(QARef) 'data.frame': 648 наб. из 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 и dimnames RefMean. Например. Столбец QARef Feature_Type=="LINE" должен соответствовать dimname "LINE" и т. д.

Любая подсказка, как это сделать или где найти ответ, будет высоко оценена.


person MarkH    schedule 26.05.2015    source источник
comment
Это R? если да, то не могли бы вы отредактировать свои теги   -  person EdChum    schedule 26.05.2015
comment
возможно, aggregate поможет... трудно сказать без воспроизводимого примера< /а>   -  person shadow    schedule 28.05.2015


Ответы (1)


Я думаю, что нашел решение. Вероятно, не элегантно, но это работает:

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)
person MarkH    schedule 27.05.2015