R обрабатывает имена столбцов в цикле for - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть фрейм данных ~ 50 000 X 200. Имена столбцов имеют 4 разных типа с числами на конце в диапазоне от 1 до 50 (store1, price1, time1, rate1, store2, price2, time2, rate2, ..., магазин 50, цена 50, время 50, цена 50).Я пытаюсь создать фиктивные переменные в зависимости от значений каждого столбца, но у меня возникают проблемы с получением R для обработки имен столбцов внутри цикла.

store1    price1       time1      rate1     store2     price2    time2     rate2 ....
   A        55.55      08:09      1.44        B         44.44     11:09     1.46
   C        55.55      08:09      1.44        G         44.44     11:09     1.46
   X        55.55      08:09      1.44        E         44.44     11:09     1.46
   D        55.55      08:09      1.44        S         44.44     11:09     1.46

Вот то, что я пытался до сих пор безуспешно.

xform_data <- function(x) { 
       for(i in 1:50){
       storeX <-  (paste("store",i,sep="")) 
       storeX2  <- ifelse(storeX  == "A", 1, 2)
       x <- cbind(x, storeX2  )
       }
    x    
}

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2011

Ниже сравнивается имя вместо сравнения значения:

ifelse(storeX  == "A", ...

Попробуйте:

ifelse(x[,storeX]  == "A", ...

Также все новые столбцы будут называться storeX2. Вы можете переименовать их:

x <- cbind(x, storeX2)
colnames(x)[length(colnames(x))] <- storeX2

(я уверен, что существуют более изящные способы сделать это.)

1 голос
/ 22 декабря 2011

@ aix дал правильный способ сделать это с помощью цикла, однако вы можете найти более быстрое или простое использование некоторых других инструментов, в зависимости от того, каким будет ваш конечный результат.Такие функции, как sapply и lapply, могут использоваться для одинаковой обработки каждого столбца кадра данных (или подмножества кадра данных).Функция model.matrix преобразует переменные в фиктивные переменные (0 и 1) за один шаг.Другие инструменты, которые могут помочь, включают факторы switch и match.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...