如何从R中的分组数据创建新的向量?

时间:2013-05-14 03:39:36

标签: r dataset

SO上可能重复:Computing a new variable using conditions of an existing data frame

我正在尝试从组中创建一个向量(例如z)。向量的长度等于创建组平均值的原始数据帧的行数,向量z的每个元素将对应于组成员。

例如,

A      mean of group A
C      mean of group c
F      mean of group F
C      mean of group C

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

听起来你需要函数ave

试着看

?ave

e.g。试试

ave(InsectSprays$count,InsectSprays$spray)

(InsectSprays附带R,应该按原样运行)或

with(InsectSprays, ave(count,spray))

与您的数据相同并将其分配给z

这是它的作用(尝试粘贴前两行,然后检查InSp):

 InSp <- InsectSprays
 InSp$ave <- with(InSp, ave(count,spray))
 head(InSp,15)
   count spray      ave
1     10     A 14.50000
2      7     A 14.50000
3     20     A 14.50000
4     14     A 14.50000
5     14     A 14.50000
6     12     A 14.50000
7     10     A 14.50000
8     23     A 14.50000
9     17     A 14.50000
10    20     A 14.50000
11    14     A 14.50000
12    13     A 14.50000
13    11     B 15.33333
14    17     B 15.33333
15    21     B 15.33333

函数ave有许多其他用途,因为你可以为它提供一个函数作为参数(然后代替计算意味着它将使用你想要的任何其他函数);要特别巧妙地使用它,请参阅this answer

答案 1 :(得分:1)

您可以使用此处所述的rowMeans:

Calculate row means on subset of columns

data <- matrix(c(1:12),nrow=3)

z <- rowMeans(data)

data
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

z
[1] 5.5 6.5 7.5

答案 2 :(得分:0)

我并不完全了解原始数据的设置方式,因此有助于了解更多信息。

如果你有行中的数据,并且你只想要一个新的向量,其中每个元素是相应行的平均值,那么可以使用R的?apply函数轻松完成:

X     = matrix(rnorm(100), nrow=10)
means = apply(X, 1, mean)