【发布时间】:2013-06-13 10:09:59
【问题描述】:
我有一个看起来像这样的数据框,我正在为 ggplot 做准备:
txt <- "v1 v2 v3
'Strongly agree' 83.1 var1
'Agree' 14.9 var1
'Disagree' 1.5 var1
'Strongly disagree' 0.6 var1
'Strongly agree' 11.8 var2
'Agree' 36.5 var2
'Disagree' 17.7 var2
'Strongly disagree' 43.8 var2
'Strongly agree' 19.6 var3
'Agree' 12 var3
'Disagree' 31.6 var3
'Strongly disagree' 36.8 var3"
mydata <- read.table(textConnection(txt), sep = " ", header = TRUE)
我的问题是:如何根据mydta$v2 中的值和mydata$v1 中的级别对mydata$v3 中的级别进行排序?
例如:如果我想根据mydata$v2 在mydata$v1 的“强烈同意”级别内的最高值对mydata$v3 中的级别进行排序,我将得到的顺序是:@987654328 @、var3、var2 因为mydata$v2 中的值是 83.1、19.6、11.8。
另一个例子:例如,如果我想根据mydata$v2 中的值的总和在mydata$v1 中的“非常同意”和“同意”级别内对mydata$v3 中的级别进行排序,我会得到的顺序将是:var1, var2, var3 因为mydata$v2 中的值是 (83.1+14.9)=98, (11.8+36.5)=48.3, (19.6+12)=31.6
我自己不知道如何处理这个问题。而且,我处理了很多这样的帧,所以代码必须进入一个函数
编辑:
在这两个例子中,我想要的结果是原始的 data.frame,只有 mydata$v3 中的级别顺序发生了变化。
所以在示例 1 中我有:
v1 v2 v3
1 Strongly agree 83.1 var1
2 Agree 14.9 var1
3 Disagree 1.5 var1
4 Strongly disagree 0.6 var1
5 Strongly agree 11.8 var2
6 Agree 36.5 var2
7 Disagree 17.7 var2
8 Strongly disagree 43.8 var2
9 Strongly agree 19.6 var3
10 Agree 12.0 var3
11 Disagree 31.6 var3
12 Strongly disagree 36.8 var3
levels(mydata$v3)
[1] "var1" "var2" "var3"
但我想结束的是这个。
v1 v2 v3
1 Strongly agree 83.1 var1
2 Agree 14.9 var1
3 Disagree 1.5 var1
4 Strongly disagree 0.6 var1
5 Strongly agree 11.8 var2
6 Agree 36.5 var2
7 Disagree 17.7 var2
8 Strongly disagree 43.8 var2
9 Strongly agree 19.6 var3
10 Agree 12.0 var3
11 Disagree 31.6 var3
12 Strongly disagree 36.8 var3
levels(mydata$v3)
[1] "var1" "var3" "var2"
在示例二中我有:
v1 v2 v3
1 Strongly agree 83.1 var1
2 Agree 14.9 var1
3 Disagree 1.5 var1
4 Strongly disagree 0.6 var1
5 Strongly agree 11.8 var2
6 Agree 36.5 var2
7 Disagree 17.7 var2
8 Strongly disagree 43.8 var2
9 Strongly agree 19.6 var3
10 Agree 12.0 var3
11 Disagree 31.6 var3
12 Strongly disagree 36.8 var3
levels(mydata$v3)
[1] "var1" "var2" "var3"
但想要:
v1 v2 v3
1 Strongly agree 83.1 var1
2 Agree 14.9 var1
3 Disagree 1.5 var1
4 Strongly disagree 0.6 var1
5 Strongly agree 11.8 var2
6 Agree 36.5 var2
7 Disagree 17.7 var2
8 Strongly disagree 43.8 var2
9 Strongly agree 19.6 var3
10 Agree 12.0 var3
11 Disagree 31.6 var3
12 Strongly disagree 36.8 var3
levels(mydata$v3)
[1] "var1" "var2" "var3"
请注意,在示例二中,我拥有的和想要的是相同的,但我有很多 data.frames,但情况并非如此。
我想我正在寻找的是一个复杂版本的
factor(maydata$v3, levels(mydata$v3)[EXAMPLE1: order after value in v2 within 1 level in v1 /EXAMPLE2: order after sum of value within 2 levels in v1])
【问题讨论】:
-
什么顺序,一个因子内的水平?
-
是的,我需要订购因子 mydata$v3 内的级别。
-
对不起,如果这个问题有点神秘,我尽量做到具体
-
但是现在,对于第一个示例,“非常同意”的值没有排序:v2 是 83.1、11.8、19.6,v3 是 var1、var2、var3 而不是 var1、var3、var2。
-
不,这些值没有排序,我认为最终不需要。它用于ggplot2中的堆叠条形图,所以我想要v2和v1的原始顺序。 v3 中的级别是我在 ggplot 中的 x 变量,所以是的,它具有 var1、var2、var3 的顺序。我希望它根据 v2 中的值(从最高值到最低值)进行相应更改