2015-02-03 3 views
2

У меня есть столбец данных (Percent.Plant.Parasites), который имеет некоторые НС. Я хочу взять среднее значение этих данных, отсортированных по фактору «Этап» (т.е. stage1 Mean = x, stage2 Mean = y и т. Д.). Я пытался это сделать, используяИспользование наложения данных с NA

tapply(rawdata$Percent.Plant.Parasites, rawdata$Stage, mean) 

Однако, я получаю NA, потому что в данных есть НС. Я не верю, что есть вариант na.rm для tapply (есть?), Так что я пытался вычислить среднее каждого отдельного фактора стадии с использованием:

mean(subset(rawdata,subset=Stage=="stage1")$Percent.Plant.Parasites, na.rm=TRUE) 

не дали никаких результатов. Вместо этого я получил ошибку:

In mean.default(subset(rawdata, subset = Stage == "Kax")$Percent.Plant.Parasites, : 

аргумент не является числовым или логическим: возвращающегося NA

Однако, когда я делаю:

typeof(subset(rawdata,subset=Stage=="Kax")$Percent.Plant.Parasites) 

я integer

Любые идеи, где я «Не так?

Спасибо.

+3

Try 'означает (подмножество (RAWDATA, Стадия == "stage1") $ Percent.Plant.Parasites, na.rm = TRUE) ' – mlegge

+4

Структуры' tapply' is: 'tapply (X, INDEX, FUN = NULL, ..., simplify = TRUE)'. Вы можете попытаться указать 'na.rm = TRUE' в параметре' ... 'следующим образом:' tapply (rawdata $ Percent.Plant.Parasites, rawdata $ Stage, mean, na.rm = TRUE) ' –

+1

что такое класс '(RAWDATA $ Percent.Plant.Parasites)'? Я уверен, что это «фактор», и в этом случае вам, вероятно, нужно будет вызвать 'rawdata $ Percent.Plant.Parasites <- as.numeric (as.character (Percent.Plant.Parasites))' – Jthorpe

ответ

0

Почему бы просто не создать новую функцию, назовите ее mean_NA, которая просто удаляет NA, прежде чем вычислять среднее значение, а затем использовать эту функцию в tapply? Что-то вроде:

mean_NA<-function(v){ 
    avg<-mean(v, na.rm = T) 
return (avg) 
} 

Как прокомментировал, убедитесь, что данные, которые вы везете среднее значение числовой/целое число, а INDEX является фактором (группы). Вы могли бы использовать вновь созданную функцию следующим образом:

tapply(X = rawdata$Percent.Plant.Parasites, INDEX = rawdata$Stage, mean_NA) 
Смежные вопросы