Проблемы кросс-табуляции - PullRequest
       7

Проблемы кросс-табуляции

2 голосов
/ 01 декабря 2011

Я работаю над большим набором данных, анализируя данные опроса.На основании данных я создаю перекрестные таблицы для различных переменных (c1, c2, c3).Я пишу код, посредством которого R автоматически выберет значение «да» в xtab и выдаст это письмо для использования в последующем анализе.

Моя проблема начинается там, где в кадре данных просто есть значения да или нет.Когда кросс-табулирование выполнено, очевидно, выбирается только значение «нет» или «да».

Df1 <- data.frame(c = 1:4, c1 = c("yes","yes","yes","yes"), c2 = c("yes", "no", "no", "no"), c3 = c("no", "no", "no", "no"), weight = c(1.1, 1.2, 1.4, 0.8))
x<-xtabs(weight~c3,data=Df1)
y<-xtabs(weight~c2,data=Df1)
z<-xtabs(weight~c1,data=Df1)

Когда я пытаюсь назначить букву, вывод кросс-таблиц, очевидно, это работает только для xtab, который имеет как да, так и нет ответов (b).

a<-x[2]
b<-y[2]
c<-z[2]

Чтобы обойти это, я попытался использовать функцию «если», но она все еще работает.Таким образом, если в xtab есть ответы «да», это значение всегда должно использоваться, и просто указывается значение «нет», тогда следует присвоить 0.

x1<-as.data.frame(x)
a<-if(x1$c3=="yes") x[2] else 0

y1<-as.data.frame(y)
b<-if(y1$c2=="yes") y[2] else 0

z1<-as.data.frame(z)
c<-if(z1$c1=="yes") z[2] else 0

Я должен получить ответы a = 0, b = 1.1 и c = 0, но пока, но ограниченное знание не очень далеко продвигает меня.любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

A factor день держит доктора подальше. Если вы преобразуете свои данные в факторы, механизм R для отслеживания категориальных данных, ваша задача будет намного проще.

Чтобы преобразовать вектор в множитель, используйте factor. Если вы заранее знаете, какими должны быть уровни факторов, укажите это с помощью аргумента levels.

> factor(Df1$c3, levels=c("yes", "no"))
[1] no no no no
Levels: yes no

Вы можете применить это в одном выражении ко всем необходимым векторам с помощью lapply:

> Df1[, 2:4] <- lapply(Df1[, 2:4], function(x)factor(x, levels=c("yes", "no")))
> str(Df1)
'data.frame':   4 obs. of  5 variables:
 $ c     : int  1 2 3 4
 $ c1    : Factor w/ 2 levels "yes","no": 1 1 1 1
 $ c2    : Factor w/ 2 levels "yes","no": 1 2 2 2
 $ c3    : Factor w/ 2 levels "yes","no": 2 2 2 2
 $ weight: num  1.1 1.2 1.4 0.8

Тогда ваш xtab вернет кросс-таблицу со всеми уровнями факторов:

> xtabs(weight~c3, data=Df1)
c3
yes  no 
0.0 4.5 

> xtabs(weight~c1, data=Df1)
c1
yes  no 
4.5 0.0 
0 голосов
/ 01 декабря 2011

Вы можете установить подмножество с помощью атрибута names:

> x["yes"]
<NA> 
  NA 
> y["yes"]
yes 
1.1 
> z["yes"]
yes 
4.5

Очевидно, что если нет элемента "yes", тогда вы получите NA.

Другая альтернатива - настроить ваши данные так, чтобыоба факторных уровня присутствуют всегда:

Df2 <- Df1
Df2[2] <- factor(Df2[[2]],levels=c("no","yes"))
Df2[4] <- factor(Df2[[4]],levels=c("no","yes"))

xtabs(weight~c3,Df2)
c3
 no yes 
4.5 0.0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...