繁体   English   中英

R中逻辑子集的无法解释的不匹配

[英]Unexplained mismatch in logical subsetting in R

我是R的初学者。我一直在使用数据框(名为df1 )。 HOUSE. NO , E1, D11, DC11 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

我看不出这是怎么回事。 我还独立检查了数据框,将其置为假是有意义的。 请让我知道为什么会这样。

我认为您正在观察的事实是, any一个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比较中都要通过“ any ”测试。

换句话说:当应用于所有房屋时any(d11!=1, dc11!=1)返回单个TRUE ,因为(在我们的两个示例中)至少在房屋上D11或DC11不等于1。您将这个单个TRUE与布尔向量(此处为c(TRUE, TRUE, TRUE) )与& ,则返回向量c(TRUE & TRUE, TRUE & TRUE, TRUE & TRUE)

现在,如果您对门牌号“ 14/13”进行操作,则将( any部分)运行any(d11[house=="14/13"]!=1, dc11[house=="14/13"]!=1)并获得FALSE

总之,您要运行的命令是

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) ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM