R:为数据$ V2中的每个不同值计算数据$ V1的方差

时间:2011-08-25 01:09:18

标签: r

我的数据框看起来像这样

V1   V2
..   1
..   2
..   1
..   3

对于每个不同的V2值,我想计算V1中数据的方差。我刚开始用R进行冒险,任何提示如何做到这一点?对于我的具体情况,我想我可以手动做类似的事情

 var1 = var(data[data$V2==1, "V1"])
 var2 = ...

等因为我知道所有可能的V2值(并不多),但我很好奇什么是更通用的解决方案。有什么想法吗?

5 个答案:

答案 0 :(得分:9)

旧待机状态tapply

dat <- data.frame(x = runif(50), y = rep(letters[1:5],each = 10))
tapply(dat$x,dat$y,FUN = var)

         a          b          c          d          e 
0.03907351 0.10197081 0.08036828 0.03075195 0.08289562 

答案 1 :(得分:7)

使用data.table的另一种解决方案。它的速度要快得多,尤其适用于拥有大型数据集的情况。

require(data.table)
dat2 = data.table(dat)
ans  = dat2[,list(variance = var(V1)),'V2']

答案 2 :(得分:3)

library(reshape)
ddply(data, .(V2), summarise, variance=var(V1))

答案 3 :(得分:3)

有几种方法可以做到这一点,我更喜欢:

dat <- data.frame(V1 = rnorm(50), V2=rep(1:5,10))
dat

aggregate (V1~V2, data=dat, var) # The first argument tells it to group V1 based on the values in V2, the last argument simply tells it the function to apply.

> aggregate (V1~V2, data=dat, var)
  V2        V1
1  1 0.9139360
2  2 1.6222236
3  3 1.2429743
4  4 1.1889356
5  5 0.7000294

另请参阅plyr包中的ddply,daply等。

答案 4 :(得分:0)

您可以使用dplyr

library(dplyr)
data %>%
  group_by(V2) %>%
  summarize(var = var(V1))

在这里,我们根据V2的唯一值进行分组,并找到每组V1的方差。