r - 未检测到 NA
问题描述
虽然我试图找到NA
我有如下问题。
dta = data.frame(group0 = c(1,1,1,2,2,2,3,3),
date0 = c(as.Date("2018-09-01",format="%Y-%m-%d"),
as.Date("2018-09-02",format="%Y-%m-%d"),
as.Date("2018-09-03",format="%Y-%m-%d"),
as.Date("2018-09-04",format="%Y-%m-%d"),
as.Date("2018-10-01",format="%Y-%m-%d"),
as.Date("2018-10-02",format="%Y-%m-%d"),
as.Date("2018-10-02",format="%Y-%m-%d"),
as.Date("2018-10-03",format="%Y-%m-%d")),
type0 = c("A","A","B","A","B","B","B","B"))
我有这样的数据,并尝试为每个组设置一个最短日期,条件如下。
dta2 = dta %>% group_by(group0) %>% summarise(tmp_date0 = min(date0[type0 == "A"]))
然后,我有这个
> dta2
# A tibble: 3 x 2
group0 tmp_date0
<dbl> <date>
1 1 2018-09-01
2 2 2018-09-04
3 3 NA
当我运行这个
> is.na(dta2$tmp_date0)
[1] FALSE FALSE FALSE
为什么是第三个FALSE
?
解决方案
有一个强制 fromInf
因为在返回的逻辑表达式中没有与“A”的值匹配的值logical(0)
min(logical(0))
#[1] Inf
因为是Date
类,所以强制NA
不是真正的NA
as.Date(Inf)
# NA
dput(as.Date(Inf))
#structure(Inf, class = "Date")
as.Date(Inf) %>%
is.na
#[1] FALSE
它被强制为 NA,但它不是 NA,如果我们检查dput
dput(dta2$tmp_date0)
#structure(c(17775, 17778, Inf), class = "Date")
一张支票is.finite
进一步证明了这一点
is.finite(dta2$tmp_date0)
#[1] TRUE TRUE FALSE
为了防止min
对选项的作用logical(0)
是使用if/else
条件
dta3 <- dta %>%
group_by(group0) %>%
summarise(tmp_date0 = if(any(type0 == 'A')) min(date0[type0 == 'A']) else NA)
现在,is.na
正确的拿起
is.na(dta3$tmp_date0)
#[1] FALSE FALSE TRUE
推荐阅读
- java - 打印在彼此下方格式化的两行
- firebase - 如何使用 rnfirebase 在 react-native android 中发送带有图像的推送通知
- java - Wildfly Swarm:配置自定义数据源的问题
- java - 如何在 Android 中更改 listView 的字体?
- sql - Oracle SQL:比较日期范围并获取同一天的日期
- ios - 当应用程序崩溃时,该时间设备未连接到 xcode。那么如何查看崩溃日志呢?
- regex - 如何在正则表达式中匹配两个新行(\ n)而不是一个?
- ios - 获取 iOS 的活跃用户数
- python - Numpy reshape 似乎输出值错误
- ios - 无法在离子中从 XLSX 生成 excel 文件