我尝试从我的数据中创建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
非常感谢你们!
答案 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
##