2014-02-06 4 views
0
unique.identifier zip.code household profession gender age value1 value2 value3 coupon 
1    197386 47508827   4  low female 24 35.13 82.50 0.00  1 
2    197386 47508827   4  low female 24 36.01 72.98 0.00  1 
3    197386 47508827   4  low female 24 35.87 82.13 0.00  1 
4    197386 47508827   4  low female 24 38.87 76.62 0.00  1 
5    197386 47508827   4  low female 24 41.89  0.00 0.00  1 
6    197388 17557326   2  low  m 38 26.81  0.00 29.98  1 
7    197388 17557326   2  low  m 38 25.61  0.00 0.00  1 
10    197392 22830028   2  low  m 33 25.66  0.00 19.99  1 

им пытаются caculate дисперсию значение1, значение2, value3 в соответствии с уникальным идентификатором как дисперсия 35.13 82.5 36.01 72.89 35.87 82.13 38.87 76.62 41.89 как они одни и те же unique.identifierВычислить дисперсию в R

какой код я должен использовать?

+3

Просьба указать, что вы пробовали до сих пор, какой ресурс/документацию вы уже искали ... Так что помощники могут лучше понять вашу проблему и дать вам правильный ответ. – Cilyan

+1

Не уверен, почему вопрос опущен, представляется довольно четко сформулированным. –

+1

@ Maxim.K Вы ироничны? Обычно я ожидаю, что вопрос о таком качестве будет занижен в забвение. Я не вижу никаких усилий со стороны ОП. – Roland

ответ

3

Вы можете использовать by:

by(dat[c("value1", "value2", "value3")], dat$unique.identifier, FUN= sapply, var) 


dat$unique.identifier: 197386 
    value1  value2  value3 
    7.90708 1250.04828 0.00000 
----------------------------------------------------------- 
dat$unique.identifier: 197388 
    value1 value2 value3 
    0.7200 0.0000 449.4002 
----------------------------------------------------------- 
dat$unique.identifier: 197392 
value1 value2 value3 
    NA  NA  NA 

где dat это имя вашего фрейма данных.

3

Использование plyr пакета

set.seed(1618) 
dat <- data.frame(id = c(1,1,2,3,3,3,4,4,4,5), 
        x = rnorm(10), 
        y = runif(10)) 

library(plyr) 
ddply(dat, .(id), summarise, var1 = var(x), var2 = var(y)) 

    id  var1  var2 
1 1 0.06147503 0.009907597 
2 2   NA   NA 
3 3 2.18725353 0.097501569 
4 4 0.52691906 0.009814862 
5 5   NA   NA 
1

Мой ответ очень похож на ответ Sven Hohenstein, но, возможно, легко понять.

Почему не subset по unique.identifier, а затем в var, все с базовыми функциями:
Сначала я прочитал ваши данные

help <- read.table(text=" unique.identifier zip.code household profession gender age value1 value2 value3 coupon 
1    197386 47508827   4  low female 24 35.13 82.50 0.00  1 
2    197386 47508827   4  low female 24 36.01 72.98 0.00  1 
3    197386 47508827   4  low female 24 35.87 82.13 0.00  1 
4    197386 47508827   4  low female 24 38.87 76.62 0.00  1 
5    197386 47508827   4  low female 24 41.89  0.00 0.00  1 
6    197388 17557326   2  low  m 38 26.81  0.00 29.98  1 
7    197388 17557326   2  low  m 38 25.61  0.00 0.00  1 
10    197392 22830028   2  low  m 33 25.66  0.00 19.99  1", header=TRUE) 

Тогда подмножество, чтобы получить только нужные с тем же unique.identifier подмножество можно изменить все, что вы хотите,:

help2 <- subset(help, unique.identifier=="197386") 
unique.identifier zip.code household profession gender age value1 value2 
1   197386 47508827   4  low female 24 35.13 82.50 
2   197386 47508827   4  low female 24 36.01 72.98 
3   197386 47508827   4  low female 24 35.87 82.13 
4   197386 47508827   4  low female 24 38.87 76.62 
5   197386 47508827   4  low female 24 41.89 0.00 

И, наконец, дисперсия, только из требуемых столбцов (вы можете также установить там п Эймс: sapply(help2[,c("value1", "value2", "value3")], FUN=var)),

sapply(help2[,7:9], FUN=var) 
    value1  value2  value3 
    7.90708 1250.04828 0.00000 
Смежные вопросы