我有一个数据框,我已经计算并添加了一difftime列:
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
Run Code Online (Sandbox Code Playgroud)
我想将其分解并计算小计,其中 days_out 为 0-60、61-90、91-120、121-180。
由于某种原因,我什至无法可靠地编写括号符号。我希望
members[members$days_out<=120, ] 仅显示 Barry 和 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
Run Code Online (Sandbox Code Playgroud)
这些在原始数据中是不存在的。没有人是无名的。我在这里做错了什么?
这是<和 其他关系运算符的标准行为:当要求评估是否NA小于(或大于、等于或...)某个其他数字时,它们返回NA,而不是TRUE或FALSE。
这是一个示例,应该可以清楚地说明发生了什么并指出一个简单的修复方法。
x <- c(1, 2, NA, 4, 5)
x[x < 3]
# [1] 1 2 NA
x[x < 3 & !is.na(x)]
# [1] 1 2
Run Code Online (Sandbox Code Playgroud)
要了解为什么所有由NA's 索引的行都有 row.names,如NA.1095、NA.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
Run Code Online (Sandbox Code Playgroud)