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
等
任何帮助将不胜感激。
答案 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)