Почему столбец не читается как фактор, когда к нему обращаются с помощью фиктивной переменной счетчика?

Я создал цикл, который использую для выбора всех факторных переменных из большого фрейма данных. Однако цикл не работает, потому что использование счетчика для индексации столбца по какой-то причине не считается фактором. Почему это? И как я могу заставить этот цикл работать:

#Here's the loop:
y <- data.frame(c = 1:2661)
for (i in 1:ncol(x)){
  ifelse(is.factor(x[i]) == FALSE, y <- cbind(y, x[i]), y <- y)
}

И проблема явно в использовании «i» для ссылки на столбец. Например:

#sample data 
df <- as.data.frame(structure(c(2L, 2L, 2L, 2L, 2L), 
                          .Label = c("female", "male"), class = "factor"))

names(df)[names(df) == "structure(c(2L, 2L, 2L, 2L, 2L), .Label = c(\"female\", \"male\"), class = \"factor\")"] <- "var"

#reference the column name directly
is.factor(df$var)
[1] TRUE
#use a counter to access the variable:
i <- 1
is.factor(df[i])
[1] FALSE

Это как-то связано с R или что-то с моим ПК? Если это как-то связано с R, может ли кто-нибудь объяснить, что происходит и как заставить мой цикл работать?


person steve zissou    schedule 09.10.2017    source источник
comment
Если вы хотите узнать, является ли ваш i-й столбец множителем, просто напишите is.factor(df[,i]). Не забудьте написать запятую для обозначения столбца, а не элемента.   -  person R18    schedule 09.10.2017
comment
с df[i] вы получите data.frame, с df[,i] вы отбросите свой столбец до примитивного типа. Введите -› ?[ ‹- в R, чтобы узнать больше.   -  person Andre Elrico    schedule 09.10.2017
comment
Этот пост также может быть полезен чтение.   -  person lmo    schedule 09.10.2017


Ответы (1)


Вам просто нужно изменить способ доступа к объекту. Поскольку вы используете фрейм данных, у вас есть два варианта доступа к столбцам.

1.

i <- 1
is.factor(df[,i]) 

2.

i <- 1
is.factor(df[[i]])
person Andryas Waurzenczak    schedule 09.10.2017
comment
Спасибо! Это решение. Не могли бы вы также объяснить, что происходит? - person steve zissou; 09.10.2017
comment
@stevezissou Читать help("["). - person Roland; 09.10.2017
comment
Как сказал @Roland, у help([) есть ответы. Но чтобы быстро ответить на ваш вопрос, в моем ответе: 1- вы рассматриваете df как матрицу, где df [строка индекса, столбец индекса] и 2- вы рассматриваете df как фрейм данных, где df [[столбец]]. Другими формами выбора столбцов являются df$namecolumn и df[[namecolumn]]. - person Andryas Waurzenczak; 09.10.2017