从有序数据框

时间:2015-11-07 02:40:14

标签: r

我想计算每个变量的平均值,然后我想创建一个具有3个最大平均值的变量名称列表。

然后,我将使用此列表对我的数据帧进行子集化,并且仅在其他分析中包含3个选定的变量。

我很接近,但似乎无法有效地编写代码。而我第一次尝试使用烟斗。

这是一个简化的数据集。

FA1 <- c(0.68, 0.79, 0.65, 0.72, 0.79, 0.78, 0.77, 0.67, 0.77, 0.7)
FA2 <- c(0.08, 0.12, 0.07, 0.13, 0.09, 0.12, 0.13, 0.08, 0.17, 0.09)
FA3 <- c(0.1, 0.06, 0.08, 0.09, 0.06, 0.08, 0.09, 0.09, 0.06, 0.08)
FA4 <- c(0.17, 0.11, 0.19, 0.13, 0.14, 0.14, 0.13, 0.16, 0.11, 0.16)
FA5 <- c(2.83, 0.9, 3.87, 1.55, 1.91, 1.46, 1.68, 2.5, 3.0, 1.45)
df <- data.frame(FA1, FA2, FA3, FA4, FA5)

这是我编写的一段代码,它并不能让我得到我想要的东西。

colMeans(df)  %>% rank()

1 个答案:

答案 0 :(得分:3)

首先确定具有最高平均值的三列。我使用colMeans来计算列平均值。然后我sort通过递减顺序的方式,只保留前三个,这是最大的三个。

three <-sort(colMeans(df),decreasing = TRUE)[1:3]

然后,只保留那些列。

df[,names(three)]
> df[,names(three)]
    FA5  FA1  FA4
1  2.83 0.68 0.17
2  0.90 0.79 0.11
3  3.87 0.65 0.19
4  1.55 0.72 0.13
5  1.91 0.79 0.14
6  1.46 0.78 0.14
7  1.68 0.77 0.13
8  2.50 0.67 0.16
9  3.00 0.77 0.11
10 1.45 0.70 0.16