2011-12-22 2 views
2

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

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  
} 

Любые предложения?

ответ

3

Следующая сравнивает имя вместо сравнения значения:

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

Try:

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

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

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

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

+0

Это сделало. Большое спасибо! – screechOwl

+0

Спасибо за идею именования. Это будет мой следующий вопрос :) – screechOwl

+0

@screechOwl: Добро пожаловать. Я рад, что мои психические силы пригождаются ;-) – NPE

1

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

Смежные вопросы