Факторы форматирования, чтобы стать векторами

Я работаю в R и хочу провести корреляцию различных переменных, относящихся к одной из моих факторных переменных, сервису. Я действительно понятия не имею, как это сделать. Я смотрел на плавление и транспонирование, но ни одна из этих функций не дает мне нужного формата. Я думаю, что мне нужно разбить факторный вектор на отдельные векторы (соответствующие каждому уровню обслуживания), а затем каким-то образом получить одну числовую переменную (сумофкейсы, например), чтобы она стала наблюдением для только что созданного вектора обслуживания. Таким образом, один уровень обслуживания — это госпитализация, а другой — управление делами. Тогда у меня будет один вектор под названием «Госпитализация», а другой — «ведение случаев», и наблюдения в каждом столбце будут соответствующими значениями для «суммы случаев». Затем я могу провести корреляцию между двумя векторами обслуживания. Таким образом, это приведет к созданию многочисленных фреймов данных (что хорошо, если это работает).

Вот пример данных:

Year   Region      Service         SumofCases
2010     10     Hospitalization       324
2011      1     Case Management       200

И я хочу, чтобы это выглядело так:

Year   Region    Hospitalization      Case Management
2010     10        200                    NA
2011      1        NA                     324

Я подумал, что, возможно, внутри корреляционной функции есть что-то, что позволило бы мне провести корреляцию между уровнями фактора, но пока ничего не нашел.

@Thomas, в ответ на ваш ответ:

Я думаю, что это определенно движется в правильном направлении, но что мне делать с неравномерными уровнями факторов?

Я запустил этот код:

tmp<-MIC$Service levels(tmp) 
levels(tmp)<-c("Ancillary Services", rep("Health Services",2))
cor(as.numeric(tmp),MIC$SumofCases)` 

и получил следующую ошибку:

Error in levels<-.factor`(*tmp*, value = c("Ancillary Services", "Health Services", : >number of levels differs > cor(as.numeric(tmp),MIC$SumofCases) [1] NA`

Результат запуска dput(head(MIC)):

dput(head(MIC))

structure(list(FY = structure(c(6L, 1L, 1L, 1L, 1L, 1L), .Label = c("2006", 

"2007", "2008", "2009", "2010", "2011"), class = "factor"), Region = 

structure(c(1L,4L, 6L, 6L, 9L, 2L), .Label = c("1", "10", "2", "3", "4", "5","6", "7", 

"8", "9"), class = "factor"), SumofCases = c(0,1, 1, 2, 11, 14), Service = 

structure(c(17L, 4L, 4L, 4L,4L, 4L), .Label = c("Ancillary Services", "Behavioral 

Treatment","Care Coordination", "Community Living Supports", "Crisis Services", 

"Dental", "ECT", "Employment Services", "Equipment", "Family Services", "Fiscal 

Intermediary Services", "Health Services", "Hospitalization", "Medication",

"Monitoring", "OT/PT/SLT", "Other", "Peer Services", "Prevention", "Residential 

Treatment", "Respite", "Screening & Assessment", "Therapy", "Transportation"), class = 

"factor")), .Names = c("FY", "Region", "SumofCases", "Service"), 

row.names = c(NA,6L), class = "data.frame")

После запуска следующего кода я получаю NA для функции cor.

tmp<-MIC$Service
levels(tmp)
levels(tmp)<-c("Ancillary Services","Behavioral Treatment","Care Coordination",
           "Community Living Supports","Crisis Services","Dental","ECT","Employment Services",         
           "Equipment","Family Services",             
           "Fiscal Intermediary Services","Health Services",             
           "Hospitalization","Medication",                  
           "Monitoring","OT/PT/SLT",                   
           "Other","Peer Services",               
          "Prevention", "Residential Treatment",       
           "Respite","Screening & Assessment",      
         "Therapy","Transportation")
cor(as.numeric(tmp),MIC$SumofCases)

Вывод:

> cor(as.numeric(tmp),MIC$SumofCases)
[1] NA

person idemanalyst    schedule 30.05.2013    source источник
comment
это еще на каком языке?   -  person Markus Mikkolainen    schedule 31.05.2013
comment
Пожалуйста, приведите воспроизводимый пример.   -  person Sven Hohenstein    schedule 31.05.2013
comment
... без примера не могу сказать, что вам нужно, но, возможно, вы могли бы проверить функцию загрузки. cran.r-project.org/doc/contrib/ Лиса-Компаньон/   -  person Docuemada    schedule 31.05.2013
comment
вам нужно закодировать каждый уровень фактора как свою собственную переменную 0 или 1. Я написал функцию для этого некоторое время назад, но она действительно неэффективна, и я уверен, что кто-то здесь может придумать что-то лучше.   -  person zap2008    schedule 31.05.2013
comment
Я не думаю, что начальная загрузка здесь уместна, это действительно сводится к проблеме форматирования данных.   -  person idemanalyst    schedule 31.05.2013


Ответы (1)


Я думаю, что вы хотите сделать, это поиграть с levels вашего фактора, чтобы превратить его в различные фиктивные переменные, а затем выполнить точечно-бисериальную корреляцию между этим фиктивным и другими вашими переменными. Здесь я создал несколько фиктивных данных и запустил корреляцию между переменной OtherVar и двумя разными фиктивными кодами факторной переменной:

df <- data.frame(Year=sort(rep(2001:2010,10)),
    Region=rep(1:10,10), 
    Service.Description=factor(sample(1:3,100,replace=TRUE), 
       levels=c(1,2,3), 
       labels=c("Hospitalization","Case Management","Other")),
    OtherVar=rnorm(100,0,1))

# one level of factor
tmp <- df$Service.Description
levels(tmp)
levels(tmp) <- c("Hospitalization",rep("Other",2))
cor(as.numeric(tmp),df$OtherVar)

# another level of factor
tmp <- df$Service.Description
levels(tmp)
levels(tmp) <- c("Other","Case Management","Other")
cor(as.numeric(tmp),df$OtherVar)
person Thomas    schedule 31.05.2013
comment
Я думаю, что это определенно движется в правильном направлении, но что мне делать с неравномерными уровнями факторов? Я запустил этот код: tmp<-MIC$Service levels(tmp) levels(tmp)<-c("Ancillary Services", rep("Health Services",2)) cor(as.numeric(tmp),MIC$SumofCases) и получил следующую ошибку: Error in levels‹-.factor(*tmp*, value = c("Ancillary Services", "Health Services", : >number of levels differs > cor(as.numeric(tmp),MIC$SumofCases) [1] NA - person idemanalyst; 03.06.2013
comment
Можете ли вы указать это в своем вопросе ... это довольно сложно читать как комментарий. - person Thomas; 03.06.2013
comment
Вы забыли закрывающие скобки во второй строке кода levels(tmp) <- c(...). - person Thomas; 03.06.2013
comment
Кроме того, предоставьте нам вывод dput(head(MIC)), чтобы мы могли увидеть ваши фактические данные. - person Thomas; 03.06.2013
comment
Ваша переменная Service имеет 24 уровня. Когда вы делаете levels(tmp) <- ..., вам нужно сопоставить все эти уровни с бинарными категориями, которые вы хотите получить в результирующей переменной tmp. Таким образом, вместо трех уровней из моего игрушечного примера правая часть этого утверждения должна быть вектором символов длиной 24. - person Thomas; 03.06.2013
comment
Я получаю NA для выходных данных, правильно ли я отредактировал код? (см. выше) - person idemanalyst; 04.06.2013
comment
Я собираюсь предложить совершенно другое предложение: когда вы читаете свои данные (предположительно, используя read.table или его вариант), попробуйте установить stringsAsFactors=FALSE. Затем попробуйте просто перекодировать переменную службы, используя что-то вроде recode из library(car). - person Thomas; 04.06.2013