2013-05-14 3 views
1

Мне нужно создать дихтомизированную переменную, основанную на двух факторах (можно надеяться, что это возможно).Dichotomize данные по коэффициенту

Скажем, у меня есть данные:

d <- data.frame ( 
    agegroup = c(2,1,1,2,3,2,1,3,3,3,3,3,1,1,2,3,2,1,1,2,1,2,2,3) , 
    gender = c(2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,1,1,1,2,1,1,1) , 
    hourwalking = c(0.3,0.5,1.1,1.1,1.1,1.2,1.2,1.2,1.3,1.5,1.7,1.8,2.1,2.1,2.2,2.2,2.3,2.4,2.4,3,3.1,3.1,4.3,5)   
    ) 

Я хотел бы создать двоичный файл (LowWalkHrs), используя гендерна и возрастную группу специфической медианы (например, когда возрастная группа = 1 и пол = 1, медиану = 2,1 (медиана была найдена с использованием excel)). В LowWalkHrs бы добавлена ​​переменная в наборе данных, так что результат будет:

 agegroup gender hourwalk LowWalkHrs 
     2  2  0.3  1 
     1  2  0.5  1 
     1  2  1.1  0 
     2  2  1.1  1 
     3  2  1.1  1 
     2  2  1.2  0 
     1  1  1.2  1 
      .... 
     3  1  5   0 

У меня есть довольно большой набор данных (~ 10k наблюдений), так что Excel находится вне вопроса.

В R Я попытался вырезать и cut2, который, кажется, не принимать фактор переменных, а также ddply, который дал мне сообщение об ошибке из (Ошибки в $<-.data.frame (*tmp*, «lowWalkHrs», значение = список (hourwalking = с (0,63,: замена имеет 949 строк, данные имеют 11303)

ответ

1

Я подозреваю, что это может быть медленным, но я думаю, что это работает.

z <- mapply(d$agegroup, d$gender, d$hourwalking, FUN=function(a,g,h) 
    as.numeric(h < median(d$hourwalking[d$agegroup==a & d$gender==g]))) 
+0

Это действительно работает, я не пробовал его на большом наборе данных, но я это сделаю. Благодаря! – user2382532

+0

Хорошо, попробовал его с большим набором данных, и я получаю сообщение об ошибке: Ошибка в mapply (d $ agegroup, d $ gender, d $ hourwalking,: Входы нулевой длины нельзя смешивать с ненулевыми длинами. – user2382532

+0

Да, материал в '[...]' не будет работать с отсутствующими значениями. – Thomas

2
d <- data.frame ( 
    agegroup = c(2,1,1,2,3,2,1,3,3,3,3,3,1,1,2,3,2,1,1,2,1,2,2,3) , 
    gender = c(2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,1,1,1,2,1,1,1) , 
    hourwalking = c(0.3,0.5,1.1,1.1,1.1,1.2,1.2,1.2,1.3,1.5,1.7,1.8,2.1,2.1,2.2,2.2,2.3,2.4,2.4,3,3.1,3.1,4.3,5)   
    ) 

d$LowWalkHrs=1*with(d,hourwalking<ave(hourwalking,list(factor(agegroup,exclude=NULL),factor(gender,exclude=NULL)),FUN=median)) 

фактор (..., exclude = NULL), добавленный для обработки NA как отдельной группы.

+0

отлично - спасибо! – user2382532

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