2012-07-06 79 views
2

我有一个数据集,我需要按参与者(RECORDING_SESSION_LABEL)和trial_number排序。但是,当我使用R排序数据时,没有任何排序函数尝试将变量以我想要的正确数字顺序排列。参与者变量出来没问题,但试用ID变量以我需要的顺序出错。使用排序R中的数据

fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(trial_number)),]

参与者编号出来为:

118 118 118 211等211 211 306等306 306等等(这是很好的)

trial_number出来作为:

1 1 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 2 2 20 20 ....(这不是我想要的 - 它似乎是在词法上排序而非比数字)

我想什么是trial_number是为了这样每个参与者数目之内:

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 ....

我已经检查过,这些变量不是因素,是数字,也没有'as.numeric',但没有喜悦的尝试。环顾四周,我看到sort()mixedsort()可能取代'订单'的建议,都提出了错误。我正在慢慢拉我的头发,我认为应该是一件简单的事情。任何人都可以帮助阐明如何做到这一点,以得到我需要的东西?

+0

您可能正在使用attach()。如果是这样,停止这样做。即使它们现在不是因素,它们或者在过去的某个时间被分类为“字符”或“as.numeric(因子)”。向我们显示dput(head(RECORDING_SESSION_LABEL)),dput(head(trial_number))的输出,如果“参与者”是一个对象,那么我们也需要它的结构。 – 2012-07-06 13:32:56

回答

2

即使您声称这不是一个因素,它的行为确实如同它是一个因素。测试是否是一个因素可能会很棘手,因为一个因素只是一个带有levels属性和类标签的整数向量。如果它是一个因素,你的代码需要有嵌套在as.numeric()里面as.character()呼叫:

fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(as.character(trial_number))),]

要真正知道这是否是一个因素,我建议str()功能: str(trial_number)

+1

很好的答案。打败我49秒。 – 2012-07-06 13:21:58

+0

这是答案。在一个因素上做'as.numeric'只会给你一个因子标签的编号,默认情况下它是字典编码的。 – Wayne 2012-07-06 13:22:25

+0

感谢Shea(以及所有其他人发布),您的解决方案像梦一样运作!看起来我可以保持我的头发!..并继续使用R.我会得到一整天的一切! – Jimichanga1 2012-07-06 14:09:57

0

我认为在这种情况下设计自己的功能可能是值得的。这也不会是太难硬,基本上你可以设计一个冒泡排序算法,只需做一些改动。这些改变可能会将每个数字改为一个字符串,并且首先将具有不同数字位数的那些数字排序到不同的容器中(通过查找哪些数字,现在是字符串,具有最大数量的索引很容易完成)。然后,以类似的方式,可以通过将最不重要的数字转换为数字类型并检查哪些是最大/最小的数字来对这些箱中的数字进行排序。如果你有兴趣,我可以为它提供一些代码,但是,看起来上面的两个代码让我对内置函数有了很大的兴趣。我从来没有使用过这些功能,所以我不确定它们是否会像你打算的那样工作,但是重新发明轮子是没有用的。

+0

非常感谢MikeZ。我试过上面的解决方案,它工作。对于R来说,我是一个比较新的/轻量级的用户,所以我开始着手写作。感谢您对此的建议。 – Jimichanga1 2012-07-06 14:10:52

+0

没问题!我刚从R开始,在这里也得到了很多帮助。祝一切顺利 :)。 – MikeZ 2012-07-06 15:21:23