Как использовать% in% условие в R, какая функция? - PullRequest
1 голос
/ 14 февраля 2020

У меня есть простое задание, которое я могу выполнить в виде множества строк отдельного кода, но я хотел бы упростить его, поскольку в будущем это займет много времени.

Моя задача - преобразовать 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 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...