我有一个看起来像这样的data.frame:
320 Dutch A7 3
321 Dutch A8 3
322 Dutch A9 4
323 Dutch A10 1
324 Dutch A11 4
327 Dutch A14 4
325 Dutch A12 3
328 Dutch A15 10
326 Dutch A13 1
329 Dutch A16 3
我如何订购,以便所有A1, A2, etc.
按字母顺序和数字顺序排列,以便我得到:
320 Dutch A7 3
321 Dutch A8 3
322 Dutch A9 4
323 Dutch A10 1
324 Dutch A11 4
325 Dutch A12 3
326 Dutch A13 1
327 Dutch A14 4
328 Dutch A15 10
329 Dutch A16 3
谢谢!
答案 0 :(得分:1)
你回答了自己的问题。请参阅order
函数的帮助。另请参阅this rant。
答案 1 :(得分:1)
暂时忘记数据框部分。这是您要订购的示例矢量
x <- paste(
rep.int(LETTERS[1:3], 16),
rep.int(1:16, 3),
sep = ""
)
y <- sample(x)
只是调用sort(y)
将无效,因为数字按字面顺序排序,所以你会得到类似A1,A10,A11,......
而是使用substring
将列拆分为字母和数字。
indexer <- data.frame(
letter = substring(y, 1, 1),
number = as.numeric(substring(y, 2))
)
然后,正如aL3xa建议的那样,请致电order
订购结果数据框。
o <- with(indexer, order(letter, number))
y[o]
要使其与数据框一起使用,只需将y
替换为your_data$index_column
。