#r #loops #character
#r #циклы #символ
Вопрос:
У меня 116 символьных переменных, и каждая из них имеет свое собственное количество уникальных уровней. Некоторые имеют только два уровня (например A
, amp; B
), в то время как другие имеют 327 уровней. Я могу преобразовать их в factor
s один за другим, используя этот код:
#train_cat <- training dataset
#cat1 <- character variable
dist <- length(unique(train_cat$cat1))
x <- seq(1, dist)
cat1 <- factor(train_cat$cat1, labels = x)
Тем не менее, я хотел бы иметь возможность вносить эти изменения в цикле, поскольку символьные переменные называются cat1
, cat2
, cat3
, …, cat116
.
Ответ №1:
Как насчет этого однострочного:
x <- data.frame(x = 1:10,
cat1 = sample(letters[1:3], size = 10, replace = T),
cat2 = sample(letters[1:3], size = 10, replace = T))
x[,grep("cat", colnames(x))] <- data.frame(lapply(x[,grep("cat", colnames(x))], factor))
Ответ №2:
Вы можете использовать a for loop
.
Я предполагаю, что вам нужно dist
просто пометить факторы числами, а затем больше нет. Также я предположу в своем примере кода, что все переменные переключаются на факторы. Если это не так, вы должны применить функцию только к подгруппе.
Цикл For будет выглядеть следующим образом:
for (var in names(train_cat)){
fact <- factor(train_cat[var], labels=seq(1,length(unique(train_cat[var])))
assign(var, fact)
}
Другим вариантом было бы использовать apply
, в то время for loop
factor
как в each variable
таким образом было создано собственное значение, вы получите новое data.frame
значение со всеми переменными.
С apply
этим будет работать так:
fact <- apply(train_cat, 2,function(x){factor(x,labels = seq(1,length(unique(x))))})
cat_vars <- data.frame(fact)