2012-12-14 26 views
1

我有我已经计算并添加一个difftime列数据框的值:搜索大于/小于为NAS

name amount 1st_date 2nd_date days_out 
    JEAN 318.5 1971-02-16 1972-11-27 650 days 
GREGORY 1518.5  <NA>  <NA> NA days 
    JOHN 318.5  <NA>  <NA> NA days 
    EDWARD 318.5  <NA>  <NA> NA days 
    WALTER 518.5 1971-07-06 1975-03-14 1347 days 
    BARRY 1518.5 1971-11-09 1972-02-09 92 days 
    LARRY 518.5 1971-09-08 1972-02-09 154 days 
    HARRY 318.5 1971-09-16 1972-02-09 146 days 
    GARRY 1018.5 1971-10-26 1972-02-09 106 days 

我想打破它,并采取小计,其中days_out 0-60 ,61-90,91-120,121-180。

出于某种原因,我甚至不能可靠地写出括号表示法。我希望

成员[会员$ days_out < = 120]只显示巴里和Garry,但我得到了一大堆线的喜欢:

NA.1095  <NA>  NA  <NA>  <NA> NA days 
NA.1096  <NA>  NA  <NA>  <NA> NA days 
NA.1097  <NA>  NA  <NA>  <NA> NA days 

那些没有在原始数据存在。没有人没有名字。我在这里做错了什么?

回答

1

这是<标准行为和其他关系运算符:当被要求评估是否NA小于(或大于或等于,或...)其它一些数字,他们返回NA,而不是TRUEFALSE

下面是一个示例,应该明确发生了什么并指向一个简单的修复。

x <- c(1, 2, NA, 4, 5) 
x[x < 3] 
# [1] 1 2 NA 
x[x < 3 & !is.na(x)] 
# [1] 1 2 

要明白为什么所有NA的索引那些行有row.names像NA.1095NA.1096,等等,试试这个:

data.frame(a=1:2, b=1:2)[rep(NA, 5),] 
#  a b 
# NA NA NA 
# NA.1 NA NA 
# NA.2 NA NA 
# NA.3 NA NA 
# NA.4 NA NA 
+0

我不认为有一个为格雷戈里,约翰任何解释,爱德华将他们的名字改为“不适用”? – Amanda

+0

@Amanda - 刚刚添加了第二节显示为什么发生。 –

+0

我仍然困惑,但它的工作原理。叹。 – Amanda

1

如果你在工作控制台的subset函数没有那个令人讨厌的“特性”,这实际上是由于[的行为而不是关系运算符。

subset(members, days_out <= 120) 

如果你是编程,那么你可以使用which或约什与& is.na(.)连词that which做背后的“幕后”:

members[ which(members$days_out <= 120), ]