我正在查看预先加载到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
答案 0 :(得分:1)
对于第一个问题,将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"
。如果您以不同的顺序询问TRUE
和FALSE
,则会得到相同数量的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)
希望这有助于澄清一点!