选择数据帧的一列将返回一个因子,而不是另一个数据帧

时间:2013-06-04 15:46:56

标签: r dataframe r-factor

我有以下代码,如果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的名称,即使过滤器只留下一列?

2 个答案:

答案 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"