У меня есть data.frame
с оценками в названных столбцах, мне нужно получить rowMeans
определенных кластеров столбцов в соответствии с индексным файлом, который определяет, какие colNames
необходимо сгруппировать. Я хотел бы сделать это одновременно, так как это выполняется в цикле, который проходит в текущем «кластере» для работы. Смотри ниже.Векторизовать эту петлю R и пользовательскую функцию
У меня есть два кадра данных, один индексный файл со следующим (плюс многое другое, это OBV только для примера)
set.seed(42)
index <- data.frame(area=c("area1","area1","area1","area2","area2","area2","area1",
"area1","area4","area5"), name=c(paste0("name",sample(6,10,replace=T))))
Другой файл данных, снова здесь обедневший пример
data <- data.frame(name1=sample(10,5),name2=sample(10,5),name3=sample(10,5),
name4=sample(10,5),name5=sample(10,5),name6=sample(10,5))
Я сделал функцию, которая возвращает rowMeans
для столбцов Д.Ф. «данные», которые составляют площадь в соответствии с «индексом» ф.р.
myfun <- function (curr.target) {
target.cols <- as.character(index$name[index$area==curr.target])
return(rowMeans(data[target.cols],na.rm=T))
}
Затем я использую эту функцию, чтобы получить средства строк для областей, перейдя через области.
for (i in seq_along(unique(index$area))){
data[,as.character(unique(index$area))[i]] <- myfun(as.character(unique(index$area))[i])
}
Я избивая себя, пытаясь придумать, как сделать это в одной строке (после того, как функция написана), но просто не может положить палец на нем. Какие-либо предложения?
Используйте 'set.seed', чтобы сделать это воспроизводимым как' sample'. – akrun