载波是一个数据帧,有1491个/有两个变量的观测值
>str(carriers)
'data.frame': 1491 obs. of 2 variables:
$ Code : Factor w/ 1490 levels "02Q","04Q","05Q",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Description: Factor w/ 1491 levels "40-Mile Air",..: 1328 1331 479 887 620 1296 523 12 876 752 ...
然后我们提取对应于描述的因子:Northwest Airlines Inc.,它对应于使用以下变量Code的因子NW:
> carriers[carriers[,1] == "NW", ]
Code Description
NA <NA> <NA>
921 NW Northwest Airlines Inc.
就在我认为自己掌握了子集时,我无法翻译这个简单的代码。我知道[carriers[,1]=="NW", ]
发生的事情并不清楚。
注意:
> carriers[921,2]
[1] Northwest Airlines Inc.
1491 Levels: 40-Mile Air A/S Conair AAA-Action Air Carrier Inc. ... Zuliana De Aviacion
carriers[carriers[,1] == "NW", ]
如何说:如果第一列是“NW”,请在数据帧载体中给我第二列。第一部分,是否说:所有(第1)列的行等于“NW”?
然后在RHS上为什么,在“NW”之后。
答案 0 :(得分:3)
我猜你在载体[,1]列中有NA
个值,这会通过子集化产生额外的NA
行。尝试添加条件& !is.na(carriers[,1])
。
carriers[carriers[,1] == "NW" & !is.na(carriers[,1]), ]
使用可重现的例子
carriers <- data.frame(Code=c('NW', NA, 'SW'),
Description = c('Northwest Airlines Inc.', '', 'Southwest Airlines Inc.'))
carriers[carriers[,1] == "NW", ]
# Code Description
#1 NW Northwest Airlines Inc.
#NA <NA> <NA>
使用更正的条件
carriers[carriers[,1] == "NW" & !is.na(carriers[,1]), ]
# Code Description
#1 NW Northwest Airlines Inc.
为什么我们要获得NA行?
我们可以检查逻辑条件的输出
carriers[,1] == "NW"
#[1] TRUE NA FALSE
如果有NA
个值,则返回NA
而不是TRUE/FALSE
。在子集化期间,我们从上面的条件中获取对应于TRUE
值的行,此外还为NA返回值创建了NA
行。
补救措施是寻找“NW”并且不是NA
的值。
carriers[,1] == "NW" & !is.na(carriers[,1])
#[1] TRUE FALSE FALSE