2016-04-07 3 views
0

Я пытаюсь создать таблицы 2by2 из моих данных.R, создавать таблицы с использованием базы :: by

У меня есть список/или dataframe который IST аналогичен следующие

my.list <- list(c(1, 1, 0, 0, 1), c(1, 0, 0, 1, 1), c(0, 0, 0, 1, 1)) 
df <- data.frame(c(1, 1, 0, 0, 1), c(1, 0, 0, 1, 1), c(0, 0, 0, 1, 1)) 
names(df) = c("test1", "test2", "test3") 

reference <- c(1, 1, 1, 0, 0) 
gender <- c("m", "w", "w", "m", "m") 

создать простой 2bx2 - таблицы я сделал:

lapply(list, table, reference) 

это приводит список с таблицами, как это :

[[1]] 
    reference 
    0 1 
    0 1 1 
    1 1 2 

[[2]] 
    reference 
    0 1 
    0 0 2 
    1 2 1 

[[3]] 
    reference 
    0 1 
    0 0 3 
    1 2 0 

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

Я попытался

by(df, gender, table, reference) 

, но все это я получаю

Ошибка в sort.list (у): 'х' мусс atomar зет für 'sort.list'

, который переводится как: 'x' должен быть атомарным для 'sort.list'

Может кто-нибудь объяснить мне, что это означает, и как я могу создавать свои таблицы 2by2?

мой желаемый результат должен выглядеть следующим образом:

"m"       "w" 

[[1]]      [[1]] 
    reference     reference  
    1      0 1 
    0 1      0 1 0 
    1 1      1 1 1 

[[2]]      [[2]] 
    reference      reference 
    1      0 1 
    0 2      1 2 1 

[[3]]      [[3]] 
    reference      reference 
    1      0 1 
    0 2      0 0 1 
          1 2 0 

Спасибо вам, ребята очень много!

+0

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

ответ

0

Вы заменили «m» и «w?»? Если нет, я все еще не уверен нужного выхода

Вы можете просто взять уже рабочую функцию и применить его к каждому индексу, созданному с by$gender

df <- data.frame(test1 = c(1, 1, 0, 0, 1), 
       test2 = c(1, 0, 0, 1, 1), 
       test3 = c(0, 0, 0, 1, 1), 
       reference = c(1, 1, 1, 0, 0), 
       gender = I(c("m", "w", "w", "m", "m"))) 

by(df, df$gender, function(x) lapply(x[, 1:3], table, x$reference)) 

## df$gender: m 
## $test1 
##  
##  0 1 
## 0 1 0 
## 1 1 1 
## 
## $test2 
##  
##  0 1 
## 1 2 1 
## 
## $test3 
##  
##  0 1 
## 0 0 1 
## 1 2 0 
## 
## --------------------------------------------------------------------- 
## df$gender: w 
## $test1 
##  
##  1 
## 0 1 
## 1 1 
## 
## $test2 
##  
##  1 
## 0 2 
## 
## $test3 
##  
##  1 
## 0 2 
## 
+0

Да! Это работает так, как я этого хотел. Большое спасибо. – KTB

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