按组计算差异

时间:2017-04-27 16:50:13

标签: r difference

我想按组计算距离。数据框中有三个类。

Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  versicolor
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa 
6          5.4         3.9          1.7         0.4  virginica 

我还计算了每个班级的行总和

rsums = aggregate(iris$rsum, by=list(Class=iris$Species), FUN=sum)

结果就像

      Class Centroid
1     setosa   1521.3
2 versicolor   2143.8
3  virginica   2571.0

所以我需要将每个组的总和减去相同组的每个行值,以获得绝对差异,例如下面给出的。

            Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
    1          5.1-1521.3  3.5          1.4         0.2  setosa
    2          4.9         3.0          1.4         0.2  setosa
    3          4.7-2143.8  3.2          1.3         0.2  versicolor
    4          4.6         3.1          1.5         0.2  setosa
    5          5.0         3.6          1.4         0.2  setosa 
    6          5.4-2571.0  3.9          1.7         0.4  virginica 

1 个答案:

答案 0 :(得分:2)

它认为你的问题有点不清楚。但是

iris$rsum <- rowSums(iris[,-5])
rsums <- aggregate(iris$rsum, by=list(Class=iris$Species), FUN=sum)
iris[,-(5:6)] <- iris[,-(5:6)] - rsums$x[iris$Species]
head(iris)
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species rsum
#1      -1516.2     -1517.8      -1519.9     -1521.1  setosa 30.6
#2      -1516.4     -1518.3      -1519.9     -1521.1  setosa 28.5
#3      -1516.6     -1518.1      -1520.0     -1521.1  setosa 28.2
#4      -1516.7     -1518.2      -1519.8     -1521.1  setosa 28.2
#5      -1516.3     -1517.7      -1519.9     -1521.1  setosa 30.6
#6      -1515.9     -1517.4      -1519.6     -1520.9  setosa 34.2

做你想做的事吗?

这利用了iris$Species在减去时与R的重用规则一起成为一个因素的事实。