R,使用base :: by创建表

时间:2016-04-07 18:28:17

标签: r

我尝试从我的数据中创建2by2表。

我有一个列表/或数据框,类似于以下

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(y)出错:'x'muss atomarseinfü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

非常感谢你们!

1 个答案:

答案 0 :(得分: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
##