You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中is.na()无法检测数据框NA值的问题求助

问题:is.na()筛选POSIXct列NA值无结果

场景说明

合并两个呼叫列表后,需筛选Call.Date为NA,且Was.this.call.cancelled?为NA或"No"的错误录入记录,存入invalid数据框。

尝试过的代码

首次尝试:

invalid <- calls %>%
  filter(is.na(Call.Date),
         is.na(`Was.this.call.cancelled?`) | `Was.this.call.cancelled?`=="No"
  )

错误修改版本:

invalid <- calls %>%
  filter(!(Call.Date = NA),
         is.na(`Was.this.call.cancelled?`) | `Was.this.call.cancelled?`=="No"
  )

还尝试过用字符串"NA"匹配,均无有效结果。

数据示例

calls <- data_frame(Call.ID = c("2024-00033364", "2024-00004349", 
"2024-00031862", "2024-00030927", "2024-00028117", "2024-00028044", 
"2024-00027885", "2024-00026433", "2024-00024393", "2024-00022877"
),Date.and.Time.Call.Received = structure(c(1706376780, 
    1704402840, 1706275680, 1706218980, 1706045460, 1706041500, 
    1706031540, 1705935480, 1705779960, 1705675440), class = c("POSIXct", 
    "POSIXt")), `Was.this.call.cancelled?` = c("Yes", "Yes", 
    "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes"), 
    Minor.or.Adult = c(NA, "Adult", "Adult", "Adult", "Adult", 
    "Adult", "Adult", "Adult", NA, NA), Sex = c("Female", "Male", 
    "Female", "Female", "Male", "Female", "Female", "Male", NA, 
    "Female"), Race = c("Unknown", "White/Caucasian", "Black/African-American", 
    "White/Caucasian", "Unknown", "Unknown", "Unknown", "Black/African-American", 
    "Unknown", "Unknown"), Date.of.Birth = c(NA, 24342, NA, NA, 
    NA, 25898, NA, NA, NA, NA), Location = c("231 not an address ", 
    "231 not an address ", "231 not an address", "231 not an address ", 
    "231 not an address ", "231 not an address ", "231 not an address ", 
    "231 not an address ", "231 not an address ", "231 not an address "
    ), Response.Staff.Name = c("Team Member 1 and Team member 2 ", 
    " Team Member 1 and Team member 2 ", " Team Member 1 and Team member 2 ", 
    " Team Member 1 and Team member 2 ", " Team Member 1 and Team member 2 ", 
    " Team Member 1 and Team member 2 ", " Team Member 1 and Team member 2 ", 
    " Team Member 1 and Team member 2", 
    " Team Member 1 and Team member 2", " Team Member 1 and Team member 2"
    ), Time.Arrived.on.Site = structure(c(1706376960, 1704403020, 
    1706276520, 1706219040, 1706046000, 1706041560, 1706032740, 
    1705935900, 1705780140, 1705676340), class = c("POSIXct", 
    "POSIXt")), Time.call.closed.on.site = structure(c(1706377020, 
    1704403080, 1706276580, 1706219100, 1706046060, 1706041620, 
    1706032800, 1705935960, 1705780200, 1705676400), class = c("POSIXct", 
    "POSIXt")),
    Updated.ID = c("2024-00033364", "2024-00004349", "2024-00031862", 
    "2024-00030927", "2024-00028117", "2024-00028044", "2024-00027885", 
    "2024-00026433", "2024-00024393", "2024-00022877"), Category = c("Attempted Suicide", 
    NA, "Mentally Ill", "Attempted Suicide", "Mentally Ill", 
    "Check the Well Being", "Attempted Suicide", "Mentally Ill", 
    "Unknown Trouble", "Unknown Trouble"), Address = c("123 Not an Address", 
    NA, "123 Not an Address ", "123 Not an Address ", 
    "123 Not an Address ", "123 Not an Address ", 
    "123 Not an Address ", "123 Not an Address ", 
    "123 Not an Address ", "123 Not an Address "
    ), Call.Date = structure(c(1706358421, NA, 1706257069, 1706199836, 
    1706026554, 1706023250, 1706013319, 1705917136, 1705762012, 
    1705655852), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Agency = c("Department Name Here", NA, "Department Name Here", 
    "Department Name Here", "Department Name Here", 
    " Department Name Here ", " Department Name Here ", 
    " Department Name Here ", " Department Name Here ", 
    " Department Name Here "), Dispositions = c(NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_), Call.Source = c("Phone", NA, 
    "Phone", " Phone ", " Phone ", " Phone ", "Phone", " Phone ", "Staff Initiated", 
    "Phone"))

期望结果

invalid <- data_frame(Call.ID = c("2024-00004349"
),Date.and.Time.Call.Received = structure(c(1704402840), class = c("POSIXct", 
    "POSIXt")), `Was.this.call.cancelled?` = c("Yes"), 
    Minor.or.Adult = c( "Adult"), Sex = c( "Male"), Race = c("White/Caucasian"), Date.of.Birth = c(24342), Location = c( 
    "231 not an address "), Response.Staff.Name = c(" Team Member 1 and Team member 2"), Time.Arrived.on.Site = structure(c(1704403020), class = c("POSIXct", 
    "POSIXt")), Time.call.closed.on.site = structure(c(
    1704403080), class = c("POSIXct", 
    "POSIXt")))

问题原因与解决方法

核心原因

is.na(Call.Date)本身是有效的——运行calls %>% filter(is.na(Call.Date))会输出Call.ID="2024-00004349"的记录。筛选无结果是因为第二个条件:当前示例数据中所有记录的Was.this.call.cancelled?都是"Yes",完全不满足is.na(...) | ... == "No"的要求,导致唯一符合Call.Date为NA的记录被排除。

修正方案

如果期望结果包含这条记录,说明你可能写错了第二个条件,可根据实际需求调整:

  1. 仅筛选Call.Date为NA的记录:
invalid <- calls %>%
  filter(is.na(Call.Date))
  1. 若需筛选Call.Date为NA且Was.this.call.cancelled?为NA或"Yes":
invalid <- calls %>%
  filter(is.na(Call.Date),
         is.na(`Was.this.call.cancelled?`) | `Was.this.call.cancelled?`=="Yes"
  )
  1. 若坚持原条件,需确保数据中存在同时满足Call.Date为NA且Was.this.call.cancelled?为NA或"No"的记录。

另外,你尝试的!(Call.Date = NA)是语法错误,正确写法为!is.na(Call.Date),但这与你的需求相反。

内容的提问来源于stack exchange,提问作者Kimmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:37:01