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

  • 本文关键字:数据 计算 V1 方差 V2
  • 更新时间 :
  • 英文 :


数据帧是这样的

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

等。

对于每个不同的V2值,我想计算V1中数据的方差。我刚刚开始学习R,有什么提示吗?对于我的特殊情况,我想我可以手动输入

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

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

和老的备用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 

另一种使用data.table的解决方案。它要快得多,当你有大量数据集时尤其有用。

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

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

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, dapply等。

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

使用dplyr你可以做

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

这里我们按V2的唯一值分组,并求出V1在每组中的方差。

最新更新