1

我有下面的代码,如果 m ==2 那么 cd 仍然是一个数据帧,而 names(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 的名称?

4

2 回答 2

5

用于drop=FALSE避免强制到最低维度。

cd <- d[,l <= m, drop=FALSE]
names(cd)
[1] "g1"
于 2013-06-04T15:50:44.400 回答
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"
于 2013-06-04T15:53:36.203 回答