R:从每个观察值中减去组/类均值

时间:2018-09-30 00:10:01

标签: r

我有一个带有

的数据框X
  1. 一列计数(计数)
  2. 一列类标签(标签)

我已经计算出一个单独的数据框Y,它具有

  1. 一列类标签(标签)
  2. 一列类别计数表示

我想通过遍历X的每一行并从每个观察到的计数中减去相应类别的类别平均值来创建Z的新向量。

Z = [X $ count_1-Y $ mean_k,...,X $ count_n-Y $ mean_k]

我想使用R而不使用其他软件包。

我知道我可以使用for循环来执行此操作,该循环检查X中观察到的计数的标签是否与Y中均值的标签相匹配,但这似乎效率不高。如何将这个操作向量化?

编辑:

我知道了。这给了我我想要的东西:

apply(SandwichAnts,1,function(x)as.numeric(x [“ Ants”]))-(mean_fillings [mean_fillings $ Filling == x [“ Filling”],] [,2]))

1 个答案:

答案 0 :(得分:0)

# generate X and Y
X <- data.frame(counts = c(1, 2, 3, 4),
            labels = c('a', 'a', 'b', 'b'))
Y <- aggregate(X$counts, by=list(X$labels),  
           FUN=mean)
colnames(Y) <- c('label', 'avg')
Y
#  label avg
#1     a 1.5
#2     b 3.5

# use the labels as row names for Y
rownames(Y) <- Y$label
D <- X$counts - Y[X$labels, 'avg']
D
# [1] -0.5  0.5 -0.5  0.5