У меня есть простое задание, которое я могу выполнить в виде множества строк отдельного кода, но я хотел бы упростить его, поскольку в будущем это займет много времени.
Моя задача - преобразовать 100 столбцов кадра данных в факторы и соответствующим образом пометить их.
, используя только подмножество моих данных, я попытался создать список переменных в качестве 12 переменных имеют разные префиксы в каждой волне (год сбора, код, который я использовал в итоге был:
ghq <-c("scghqa", "scghqb", "scghqc", "scghqd", "scghqe", "scghqf", "scghqg",
"scghqh", "scghqi", "scghqj", "scghqk", "scghql")
waves <- c("a", "b", "c", "d", "e")
ghqa <- paste0(waves[1], sep = "_", ghq[1:12])
ghqb <- paste0(waves[2], sep = "_", ghq[1:12])
ghqc <- paste0(waves[3], sep = "_", ghq[1:12])
ghqd <- paste0(waves[4], sep = "_", ghq[1:12])
ghqe <- paste0(waves[5], sep = "_", ghq[1:12])
ghqv <- c(ghqa, ghqb, ghqc, ghqd, ghqe)
Я пробовал это в для l oop, но я не мог получить его для получения вывод в виде списка или символьного вектора (кажется, что работала только матрица), см. код для этого в нижней части этого вопроса, если вам интересно.
Здесь, чтобы иметь возможность использовать apply, мне нужно знать, какие положения этих столбцов в кадре данных применяются (данные [c (индексы столбцов), 2, lfactor (c (значения в факторе), уровни = c (уровни, которым они будут соответствовать), метки = c (текстовые метки для прикрепления к каждому уровню)) ПРИМЕЧАНИЕ: Я поставил это здесь, потому что, возможно, я поступаю неправильно, пытаясь использовать apply.
так, чтобы определить столбцы, которые я хочу от данных, которые я использую d
head(dat[colnames(dat) %in% ghqv]) # produced the data for the 60 rows I want
length(dat[colnames(dat) %in% ghqv]) # 60 (as expected)
поэтому я попытался:
which(dat[colnames(dat) %in% ghqv])
Error in which(dat[colnames(dat) %in% ghqv]) :
argument to 'which' is not logical
Как я могу преобразовать это в логическое, пожалуйста? как и всякий раз, когда я использую == с% в%, кажется, он его не распознает
Чтобы попытаться упростить это, с глупыми именами переменных, я создал ту же проблему в наборе данных mt cars:
cars <- mtcars
vars <- c("mpg", "qsec")
head(cars[colnames(cars) %in% vars])
which(cars[colnames(cars) %in% vars])
Error in which(cars[colnames(cars) %in% vars]) :
argument to 'which' is not logical
Любая помощь будет приветствоваться, спасибо
Так же, как в стороне; Я не могу изменить для l * 1034, чтобы создать один вектор, который добавил
vars <- data.frame(matrix(nrow = 12, ncol = 5)) # we will create a container
colnames(vars) <- c("wave1", "wave2", "wave3", "wave4", "wave5")
rownames(vars) <- c("ghq1", "ghq2", "ghq3", "ghq4", "ghq5",
"ghq6", "ghq7", "ghq8", "ghq9", "ghq10",
"ghq11", "ghq12")
for(i in 1:5){
a <- paste(waves[i], ghqv[1:12], sep = "_")
vars[,i] <- a
print(a) # we print it to see in console
}