我的数据框看起来像这样
V1 V2
.. 1
.. 2
.. 1
.. 3
等
对于每个不同的V2值,我想计算V1中数据的方差。我刚开始用R进行冒险,任何提示如何做到这一点?对于我的具体情况,我想我可以手动做类似的事情
var1 = var(data[data$V2==1, "V1"])
var2 = ...
等因为我知道所有可能的V2值(并不多),但我很好奇什么是更通用的解决方案。有什么想法吗?
答案 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
的方差。