根据平均值对R数据帧中的列进行重新排序 [英] Reordering columns in an R dataframe according to average values

查看:17
本文介绍了根据平均值对R数据帧中的列进行重新排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望根据每列的算术平均值对数据框的列进行重新排序。

用于:

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 = 2S2 = 1.6666S3 = 1,颠倒了数据帧中S1和S3列的位置。

另外,我的实际数据也有NA的值。

推荐答案

使用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

计算列平均值,省略:

(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

这篇关于根据平均值对R数据帧中的列进行重新排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆