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
我试图根据唯一标识符计算方差value1,value2,value3
喜欢35.13 82.5 36.01 72.89 35.87 82.13 38.87 76.62 41.89
的方差,因为它们共享相同的unique.identifier
我应该使用什么代码?
答案 0 :(得分: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
是数据框的名称。
答案 1 :(得分: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
答案 2 :(得分:1)
我的回答与斯文海恩斯坦的答案非常相似,但也许很容易理解。
为什么不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