我有兴趣订购以下数据框的列
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
。这里出了什么问题。
答案 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"