Преобразование R-кадров данных с использованием переменных в цикле - PullRequest
1 голос
/ 12 января 2010

Я пытаюсь заменить значения в кадре данных R столбцом. Я хотел бы зациклить данный список столбцов данных и заменить все значения «Да» на 1, а все остальные значения на 0.

Я пытался сделать это, используя функции transform () и ifelse (), примерно так:

# List of selected Columns:
ColumnNames = c("Frigori", "Microond" , "Arca", "Aspira")

# Replace Values in dataframe
for(i in 1:length(ColumnNames)){
dataframe <- transform(dataframe, ColumnNames[i] = ifelse(Columnames[i] == "Yes", 1, 0))
}

Этот фрагмент кода отлично работает с явными именами столбцов вне цикла, но с массивом он выдаст мне следующую ошибку:

Error: unexpected '=' in:
"for(i in 1:length(Appliances)){
dataframe <- transform(dataframe, ColumnNames[i] ="

Я не знаю, что здесь не так, но проблема должна быть связана с подстановкой переменных.

Ответы [ 2 ]

7 голосов
/ 13 января 2010

Код на самом деле можно упростить до одной короткой строки без циклов или apply() вообще:

dataframe <- data.frame(a = c("No", "Yes", "No", "No", "Yes"),
                        b = c("Hi", "Hi", "Mom", "Hi", "Mom"),
                        c = c("Yes", "Yes", "Yes", "Yes", "No"))
cols <- c("a","c")
dataframe[,cols] <- as.numeric(dataframe[,cols]=="Yes")
dataframe

  a   b c
1 0  Hi 1
2 1  Hi 1
3 0 Mom 1
4 0  Hi 1
5 1 Mom 0
1 голос
/ 20 января 2010

Имитация данных:

data <- data.frame(matrix(ifelse(runif(40)>.5,"YES",letters[1:26]), 10, 4))

Предположим, вы хотите изменить столбцы X2 и X4

cols <- c("X2","X4")
data[,cols] <- apply(data[cols],2,function(x) ifelse(x=="YES",1,0))
...