2

我有一个数据集,需要按参与者 (RECORDING_SESSION_LABEL) 和 trial_number 进行排序。但是,当我使用 R 对数据进行排序时,我没有尝试将变量按我想要的正确数字顺序排列。参与者变量输出正常,但试用 ID 变量以错误的顺序输出,无法满足我的需要。

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

参与者 ID 显示为:

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()可能会代替“订单”来解决问题,但都会出现错误。我正在慢慢地把头发拉出来,因为我认为这应该是一件简单的事情。任何人都可以帮助阐明如何做到这一点以获得我需要的东西吗?

4

2 回答 2

2

即使您声称它不是一个因素,但它的行为确实就像它是一个因素一样。测试某个东西是否是一个因素可能会很棘手,因为一个因素只是一个具有级别属性和类标签的整数向量。如果这是一个因素,您的代码需要调用as.character()嵌套在as.numeric()

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

为了确定这是否是一个因素,我推荐该str()功能: str(trial_number)

于 2012-07-06T13:20:22.230 回答
0

我认为在这种情况下设计自己的功能可能是值得的。不会很难,基本上你可以设计一个冒泡排序算法,做一些改动。这些更改可以将每个数字更改为一个字符串,并首先将具有不同位数的数字分类到不同的 bin 中(通过查找哪些数字(现在是字符串)具有最大数量的索引来轻松完成)。然后,以类似的方式,可以通过将最低有效位转换为数字类型并检查哪些是最大/最小来对这些箱中的数字进行排序。如果你有兴趣,我可以为此想出一些代码,但是,看起来我上面的两个已经用一些内置函数打败了我。我从未使用过这些功能,所以我不确定它们是否会按您的意愿工作,但是重新发明轮子没有用。

于 2012-07-06T13:26:47.073 回答