在R中创建一个逻辑向量并使用which函数

17

我有一个包含三列的数据集。第一列是类型,第二列是面积,第三列是价值。我想写一个逻辑向量,使得类型=1,面积=3和价值=6。我能够使用subset创建数据框,但是我无法创建逻辑向量。

hello <- read.csv("type.csv")
hello1 <- subset(hello, type==1 & area ==3 & worth ==6)

价值列中有许多NA值。数据集在https://www.dropbox.com/s/gjjwmnr8uxmy18y/type.csv

谢谢。

Jdbaba


3
尝试:with(hello, hello[type == 1 & area == 3 & worth == 6, ]) - Tyler Rinker
@ Tyler,谢谢您的回复。实际上我需要做的是分配一个逻辑向量来标识type == 1,area == 3和worth == 6的类型。之后我需要应用which()函数来识别数据框中当逻辑向量为true时的行。 - Jd Baba
2
which(with(hello, type == 1 & area == 3 & Worth == 6)) - Arun
5
使用Stack Overflow来完成你的作业? - tooluser
2个回答

18

所以问题得到了回答:

which(with(hello, type == 1 & area == 3 & Worth == 6))

记住,您只需将其用作:

which(hello$type1 == 1 & hello$area == 3 & hello$Worth == 6)

同样,当您需要检查更多的语句时,with 就可以派上用场了,因为它允许您在不每次键入 hello$ 的情况下进行检查。


1
是的,已经回答了。谢谢。 - Jd Baba
2
如果像 OP 建议的那样,这个向量将被用于索引,那么你就不需要使用 which。事实上,甚至建议不要使用它;我心里至少有一个例子说明,当它用于负索引时可能会导致麻烦:当 bool.vec 在所有地方都是 FALSE 时,hello[-which(bool.vec), ]hello[!bool.vec, ] 不同。 - flodel

6

虽然已经有一个答案被接受了,但原帖提到需要创建一个逻辑向量,而该答案

which(hello$type1 == 1 & hello$area == 3 & hello$Worth == 6)

返回符合这些条件的行。如果要返回逻辑向量,只需使用 which 的参数即可。

hello$type1 == 1 & hello$area == 3 & hello$Worth == 6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接