Ответ 1
Просто для забавы размещения решения data.table
, хотя вы, вероятно, должны сделать то, что предложил @lukeA
library(data.table)
A <- setDT(df[df$factor == "a", ])[, mean(value)]
## [1] 1.5
Возможно, это просто, но я не могу найти ответ в Интернете. У меня проблема со средним вычислением по уровням. Мои данные выглядят типично:
factor, value
a,1
a,2
b,1
b,1
b,1
c,1
Я хочу получить вектор A, содержащий значение только для уровня "a" Если я напечатаю A на консоли, я хочу получить 1,5 И этот метод вычисления среднего значения должен использовать факторы.
Заранее спасибо за помощь.
Просто для забавы размещения решения data.table
, хотя вы, вероятно, должны сделать то, что предложил @lukeA
library(data.table)
A <- setDT(df[df$factor == "a", ])[, mean(value)]
## [1] 1.5
взгляните на tapply
, который позволяет разбить вектор по коэффициенту (-ам) и применить функцию к каждому подмножеству
> dat<-data.frame(factor=sample(c("a","b","c"), 10, T), value=rnorm(10))
> r1<-with(dat, tapply(value, factor, mean))
> r1
a b c
0.3877001 -0.4079463 -1.0837449
> r1[["a"]]
[1] 0.3877001
Вы можете получить доступ к своим результатам с помощью r1[["a"]]
и т.д.
В качестве альтернативы, один из популярных пакетов R (plyr
) имеет очень хорошие способы сделать это.
> library(plyr)
> r2<-ddply(dat, .(factor), summarize, mean=mean(value))
> r2
factor mean
1 a 0.3877001
2 b -0.4079463
3 c -1.0837449
> subset(r2,factor=="a",select="mean")
mean
1 0.3877001
Вместо этого вы можете использовать dlply
(который принимает данные и возвращает список)
> dlply(dat, .(factor), summarize, mean=mean(value))$a
mean
1 0.3877001
Следующий код запрашивает среднее значение, когда factor = a:
mean(data$value[data$factor == "a"])
Еще одна простая возможность - это функция "by":
by(value, factor, mean)
Вы можете получить среднее значение уровня фактора "a":
factor_means <- by(value, factor, mean)
factor_means[attr(factor_means, "dimnames")$factor=="a"]