从R中的表创建逻辑向量

时间:2014-02-12 22:56:37

标签: r

我正在查看预先加载到R中的数据集,称为UCBAdmissions:

> str(UCBAdmissions)
table [1:2, 1:2, 1:6] 512 313 89 19 353 207 17 8 120 205 ...
- attr(*, "dimnames")=List of 3
..$ Admit : chr [1:2] "Admitted" "Rejected"
..$ Gender: chr [1:2] "Male" "Female"
..$ Dept  : chr [1:6] "A" "B" "C" "D" ...

我想为每个女性创建一个逻辑向量,其中TRUE等于“Admitted”,FALSE为“Rejected”。我该怎么做?

第二个有点相关的问题 - 如果我想用矢量制作矩阵,那么它的符号是什么?对于lists和data.frame,我可以使用数据$ variable.I.wish.to.extract。

Jen

2 个答案:

答案 0 :(得分:1)

这是不完整但是太长而无法添加为评论。如果OP澄清了他们想要实现的目标

,我会删除它或更新它

对于第一个问题,将UCBAdmissions对象("table"对象转换为数据框,然后创建逻辑:

UCB <- as.data.frame(UCBAdmissions)
ind <- with(UCB, Gender == "Female" & Admit == "Admitted")

给出了

R> ind
 [1] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE
[13] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE

我怀疑这不是你想要的,因为数据以列联表格式存储;在各个类中只有聚合计数。 ind正在编制索引的是UCB哪些行Gender == "Female"Admit = "Admitted"。如果您以不同的顺序询问TRUEFALSE,则会得到相同数量的Gender == "Female"Admit = "Rejected"值。

如果您想将其吹向实际数据,则需要重复UCB

R> head(UCB)
     Admit Gender Dept Freq
1 Admitted   Male    A  512
2 Rejected   Male    A  313
3 Admitted Female    A   89
4 Rejected Female    A   19
5 Admitted   Male    B  353
6 Rejected   Male    B  207
每行

Freq次,然后创建逻辑向量。这就是你想要的吗?

答案 1 :(得分:1)

如果&#34;与&#34;命令不适合您,您也可以尝试以下方法来创建逻辑矢量:

logical.vector <- ifelse(UCBAdmissions$Gender == "Female" & UCBAdmissions$Admit == "Admitted", TRUE, FALSE)

然而,这个逻辑向量包括男性,这意味着除了未被录取的女性之外,所有男性都会得到错误。

如果你想要一个真正返回FALSE的逻辑向量,只有当它是一个未被录取的女性时,并且当它是一个女性时才被接受,那么你必须首先对这些数据进行子集化:

females <- subset(UCBAdmissions, Gender == FEMALE)
logical.vector <- ifelse(females$Admit == "Admitted", TRUE, FALSE)

希望这有助于澄清一点!