2015-06-10 4 views
0

У меня есть dataframe данных съемки, и я хочу получить от него относительные частоты.ссылается на элемент вектора в R

Я сделал вектор уникальных имен рода из файла:

> CoralGenera <- unique(dfrm$V5) 

Тогда для каждого элемента (род) в векторе (CoralGenera), я хочу, чтобы запустить эту функцию:

> mean(dfrm$V5 == "Genus") 

Но он получает каждую строку, сохраненную как элемент в векторе, который будет использоваться в функции, которая удерживает меня.

Я пробовал:

> for (Genus in CoralGenera){ 
    CGrfreq <- c(CGrfreq,mean(dfrm$Genus == Genus))} 

который бежал, но вернулся вектор с большим количеством элементов, чем CoralGenera

Я пытался использовать lapply() вместо того, чтобы избежать копирования, но не может получить это работать:

> lapply(seq_along(CoralGenera), mean(dfrm$Genus == Genus)) 

> lapply(Genus(CoralGenera), mean(dfrm$Genus == "Genus")) 

> lapply(CoralGenera, mean(dfrm$Genus == x)) 

> lapply(CoralGenera, mean(dfrm$Genus == CoralGenera[v])) 

Каждый раз, когда он возвращает сообщение об ошибке, как это: Ошибка в match.fun (FUN): «означают (DFRM $ Genus == Genus) 'не является функцией, символом или символом

Это мой первый раз, написав такой код в R, поэтому любая помощь будет очень оценена.

+1

'lapply (CoralGenera, function (x) mean (dfrm $ Род [dfrm $ Род% в% x]))'. Легче было бы 'с (dfrm, aggregate (Род, V5, среднее значение))'. Также можно использовать 'tapply', если вам нужен вектор вместо фрейма данных. Конструкция 'dfrm $ Genus == x' будет возвращать логический вектор, который' mean' будет принуждать к 0 и 1, а не значениям. –

ответ

0

Непонятно, из чего вы хотите получить среднее значение. Попробуйте следующее:

sapply(CoralGenera, function(genus) mean(dfrm$Genus[dfrm$V5 == genus])) 
sapply(CoralGenera, function(genus) mean(dfrm$V5[dfrm$V5 == genus])) 
Смежные вопросы