2013-06-04 2 views
1

У меня есть приведенный ниже код, если m == 2, тогда cd остается фреймворком данных, а имена (cd) - из исходного фрейма d. Однако если т ==-только один столбец в dataframe остается и компакт-диск превращается в фактор, и я теряю имена ...Выбор одного столбца кадра данных возвращает коэффициент вместо другого фрейма данных

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) 

Я хотел бы сохранить имена я, даже если фильтр только листы один столбец?

+1

Try 'кд <- d [, l <= m, drop = FALSE] '. – Roland

ответ

5

Используйте drop=FALSE, чтобы избежать принуждения к самому низкому размеру.

cd <- d[,l <= m, drop=FALSE] 
names(cd) 
[1] "g1" 
+0

Я знал, что это должно быть что-то вроде этого ... отлично! Техас –

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" 
Смежные вопросы

 Смежные вопросы