订购数据框的列

时间:2015-07-06 17:22:16

标签: r sorting

我有兴趣订购以下数据框的列

structure(list(DETECTION = c(0.000219, 0.000673, 0.000322, 0.602006, 
0.000468, 0.204022, 0.000491, 0.003067), VALUE = structure(1:8, .Label = c("10071_s_at", 
"1053_at", "117_at", "1255_g_at", "1294_at", "1320_at", "1405_i_at", 
"14312_at"), class = "factor")), .Names = c("DETECTION", "VALUE"
), class = "data.frame", row.names = c(NA, -8L))

我想在第二个数字列(DETECTION)。

我在这里试了一下

d1 <- data[1, , drop = FALSE]
nums <- d1[, nn <- sapply(d1, is.numeric)]

ch <- d1[, !nn, drop = FALSE]
id <- names(ch[, grepl('_at$', as.character(unlist(ch))), drop = FALSE])
p <- names(nums)
d <- data[,c(id,p)]

names(nums)会返回NULL。这里出了什么问题。

2 个答案:

答案 0 :(得分:2)

dt <- as.data.table(data)

来自R帮助:“当需要重新排序data.table的列时,惯用的方法是使用setcolorder(x,neworder),而不是使用x&lt; - x [,neworder,with = FALSE]这是因为后者制作了data.table的完整副本,在大多数情况下这可能是不必要的。“

setcolorder(dt,c("VALUE","DETECTION"))

答案 1 :(得分:1)

names(nums)NULL,因为尺寸已被删除。您可以添加参数drop以保持尺寸不变:

names(nums)
#NULL

nums <- d1[, nn <- sapply(d1, is.numeric), drop=FALSE]

names(nums)
#[1] "DETECTION"