我有以下代码,如果m == 2则cd仍然是数据帧,而名称(cd)来自原始数据帧d。 但是,如果m == 3,则数据帧中只剩下一列,而cd变成一个因子,我就失去了名字...
samplesize <-100
g1 <- gl(2,samplesize/2,labels=c("V","M"))
g2 <- gl(3,samplesize/3,labels=c("V","M","U"))
m <- 2
d <- data.frame(g1,g2)
l <- sapply(d,nlevels)
cd <- d[,l <= m]
names(cd)
我想保留d的名称,即使过滤器只留下一列?
答案 0 :(得分:5)
使用drop=FALSE
来避免强制降级到最低维度。
cd <- d[,l <= m, drop=FALSE]
names(cd)
[1] "g1"
答案 1 :(得分:1)
[
的经典问题,即默认为drop=TRUE
:
> args(`[.data.frame`)
function (x, i, j, drop = if (missing(i)) TRUE else length(cols) ==
1)
NULL
所以(正如P Lapointe所说),使用drop=FALSE
:
> cd <- d[,l <= m, drop = FALSE]
> names(cd)
[1] "g1"