有条件地匹配两个列值时,为什么在打印到RStudio控制台的结果数据框中会打印几个<na>值?

时间:2018-07-04 10:29:29

标签: r filter

当我检查一列是否包含特定值,另一列是否包含不同值时,为什么打印到RStudio控制台的结果数据框之间显示多个<NA>值?

我想在每种情况下都看到整行,因此选择了以下方法(而不是which(geochats$origin_city == "new york" & geochats$end_city == "manassas")会列出匹配行的行号)。

在这种情况下,我希望看到打印到控制台的两行,但我得到的行更多,大部分显示为<NA>

为什么会这样?

> geochats[geochats$origin_city == "new york" & geochats$end_city == "manassas", ]
                                    partid       user origin_city end_city  associate
2893  2aadb2ef-c558-4902-a75b-7e5ca62b2079 WB7iSYU8yR    new york manassas CefPn1OTZF
NA                                    <NA>       <NA>        <NA>     <NA>       <NA>
NA.1                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.2                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.3                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.4                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.5                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.6                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.7                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.8                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.9                                  <NA>       <NA>        <NA>     <NA>       <NA>
NA.10                                 <NA>       <NA>        <NA>     <NA>       <NA>
NA.11                                 <NA>       <NA>        <NA>     <NA>       <NA>
NA.12                                 <NA>       <NA>        <NA>     <NA>       <NA>
NA.13                                 <NA>       <NA>        <NA>     <NA>       <NA>
NA.14                                 <NA>       <NA>        <NA>     <NA>       <NA>
15649 e5af7b89-e38b-463f-a1ac-2e64d2e1bd24 WB7iSYU8yR    new york manassas CefPn1OTZF
NA.15                                 <NA>       <NA>        <NA>     <NA>       <NA>
NA.16                                 <NA>       <NA>        <NA>     <NA>       <NA>
NA.17                                 <NA>       <NA>        <NA>     <NA>       <NA>
NA.18                                 <NA>       <NA>        <NA>     <NA>       <NA>

1 个答案:

答案 0 :(得分:0)

如评论中所述,如果缺少值,则逻辑条件不适用于子集。因此,我们可以使用which()限制条件的输出。

geochats[which(geochats$origin_city == "new york" & geochats$end_city == "manassas"), ]

一个简单的例子:

x <- c(NA, 1, 2)

在这里,条件x > 1输出NA FALSE TRUE,因为无法为NA值求值。 which现在选择所有TRUE值在输出矢量中的位置,因此可以在忽略NA时用于子集:

> x[which(x > 1)]
[1] 2