我是R的初学者。我一直在使用数据框(名为df1
)。 HOUSE. NO , E1, D11, DC11
是框架中的各种列名。以下是我执行的逻辑子集的结果。
df1
HOUSE.NO D11 DC11 E1
75 16/215 2 2 NA
76 15/262 1 1 2
77 16/220 1 1 2
78 14/13 1 1 1
79 14/9 2 2 NA
df1$HOUSE.NO[df1$E1==1&any(!df1$D11==1,!df1$DC11==1)]
[1] NA "14/13" NA
但是对于“14/13
”值,当我单独计算逻辑的值时,它出现了FALSE
。
df1$E1[df1$HOUSE.NO=="14/13"]==1&any(df1$D11[df1$HOUSE.NO=="14/13"]!=1, df1$DC11[df1$HOUSE.NO=="14/13"]!=1)
[1] FALSE
我无法看到这是怎么发生的。我还独立检查了数据框架,它是错误的。请让我知道为什么会这样。
答案 0 :(得分:1)
我认为你观察到的是any
适用于整个向量而==
应用于向量的每个元素。
例如:
e1 <- c(1, 1, 1)
d11 <- c(1, 2, 2)
dc11 <- c(1, 1, 2)
house <- c("14/13", "a", "b", "c")
当你测试这个
时house[e1==1 & any(d11!=1, dc11!=1) ]
据说所有房屋都符合条件,这是正确的。但是当你仔细看看14/13的门牌号时,它的E1确定等于1,但它的D11和DC11都等于1.那是因为在比较集中在这个房子上,特别是那里any
比较中没有其他房子通过&#34; any
&#34;测试
换句话说:any(d11!=1, dc11!=1)
在应用于所有房屋时返回单个TRUE
因为(在我们的两个示例中)至少有房屋,D11或DC11不等于1。您将此单TRUE
与一个布尔向量(此处为c(TRUE, TRUE, TRUE)
)与&
结合使用,它会返回向量c(TRUE & TRUE, TRUE & TRUE, TRUE & TRUE)
。
现在,如果您对门牌号码&#34; 14/13&#34;进行操作,您将运行(any
部分)any(d11[house=="14/13"]!=1, dc11[house=="14/13"]!=1)
并获取FALSE
。< / p>
总之,您要运行的命令是
house[ e1[house=="14/13"]]==1 & any(d11!=1, dc11!=1) ]
而不是
house[ e1[house=="14/13"]]==1 &
any(d11[house=="14/13"]!=1, dc11[house=="14/13"]!=1) ]