r语言 - 有没有比这更干净的方法来返回数据点:SchIndxRead %>% select(,.DormList) %>% filter(SchIndxRead$.大学查找== "MI



我希望能够简单而优雅地从我的data.frame中选择出数据,但我是r的新手。

这工作:

SchIndxRead %>% select(,.DormList) %>% filter(SchIndxRead$.College.Lookup=="MIAD")

我试着用这个:

SchIndxRead[SchIndxRead$.College.Lookup=='MIAD',".DormList"]

期待的只是" two ">

却得到了这个结果:

> [1] "Two50Two" NA         NA         NA         NA        
> [6] NA         NA         NA         NA         NA        
>  [11] NA         NA         NA         NA         NA        
>  [16] NA         NA         NA         NA         NA        
>  [21] NA         NA         NA         NA         NA    

您的列.College.Lookup可能具有NA值,因此表达式SchIndxRead$.College.Lookup=="MIAD"返回TRUE's和FALSE's,但也返回NA's。

当您尝试使用包含NA's的向量来子集变量时,结果也将包含NA's:

set.seed(10)
df = tibble(a = 1:10, b = sample(c(0, 1, NA), 10, TRUE))
> df
# A tibble: 10 × 2
a     b
<int> <dbl>
1     1    NA
2     2     0
3     3     1
4     4    NA
5     5     1
6     6    NA
7     7    NA
8     8    NA
9     9    NA
10    10    NA
> df$b == 1
[1]    NA FALSE  TRUE    NA  TRUE    NA    NA    NA    NA    NA
> df[df$b == 1, "a"]
# A tibble: 9 × 1
a
<int>
1    NA
2     3
3    NA
4     5
5    NA
6    NA
7    NA
8    NA
9    NA

这就是为什么在你的第二次尝试中有NA

dplyr::filter"忽略"NA的,也就是说,它过滤掉条件返回FALSE的行。NA。这就是为什么在你的第一次尝试中没有NA

改进代码的两个提示:

  1. 改变selectfilter的顺序会更好:
SchIndxRead %>% filter(.College.Lookup == "MIAD") %>% select(.DormList)

这样你就不必在以后添加SchIndxRead$了。

  1. 您可能更喜欢使用pull():
SchIndxRead %>% filter(.College.Lookup == "MIAD") %>% pull(.DormList)

最新更新