我想按组计算距离。数据框中有三个类。
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
答案 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的重用规则一起成为一个因素的事实。