我想根据每列的算术平均值对数据框的列重新排序。
For:
S1 S2 S3
1 1 1
2 1 1
3 3 1
预期输出是:
S3 S2 S1
1 1 1
1 1 2
1 3 3
在上述情况下,平均值为:S1 = 2
, S2 = 1.6666
and S3 = 1
,反转数据框中的 S1 和 S3 列位置。
此外,我的真实数据也有 NA 值。
Use the order()
功能。
示例性数据框:
df <- data.frame(s1=runif(5), s2=runif(5), s3=runif(5))
df[1,2] <- NA # some NAs
df
## s1 s2 s3
## 1 0.74473576 NA 0.71547379
## 2 0.66997782 0.6474405 0.62320795
## 3 0.05361586 0.5370381 0.03298139
## 4 0.06209263 0.9409920 0.46096984
## 5 0.42432948 0.9983042 0.38503196
计算列平均值,省略 NA:
(mns <- colMeans(df, na.rm=TRUE))
## s1 s2 s3
## 0.3909503 0.7809437 0.4435330
所需的列顺序是:
order(mns)
## [1] 1 3 2
(s1
首先,s2
最后,并且s3
应成为第二列)
现在您可以对列重新排序:
(df <- df[,order(mns)])
## s1 s3 s2
## 1 0.74473576 0.71547379 NA
## 2 0.66997782 0.62320795 0.6474405
## 3 0.05361586 0.03298139 0.5370381
## 4 0.06209263 0.46096984 0.9409920
## 5 0.42432948 0.38503196 0.9983042
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)