【问题标题】:NA values are not recognized properly using dplyr使用 dplyr 无法正确识别 NA 值
【发布时间】:2021-09-14 04:44:50
【问题描述】:

我有一个包含两列的数据集,其中一列是缺失值。 我加载它使用

data <- read_excel("file.xlsx") %>%
  select("ID", "Value")

小标题是这样的

ID Value
1 2
NA 4
32 1

NAs 被认为是这样的。 但是,我使用

data["ID"=="NA"] <- NA

确保这不是问题 (R: is.na() does not pick up NA value)。

当我尝试过滤时:

data %>%
filter(!is.na(ID))

整个 tibble 保持不变,不会删除任何行。 所以我试试

data %>%
mutate(
isna <- is.na(ID)
)

所有的 isna 都是 FALSE。

为什么 dplyr 不能识别 NA?

感谢您的每一次帮助!

【问题讨论】:

  • 您是否检查过 NA 是不是实际的 NA 而不是字符串?
  • 是的!这就是我使用的原因:data["ID"=="NA"] &lt;- NA
  • @C.Sebastian 那段代码没有做你想做的事。

标签: r dplyr na


【解决方案1】:
data["ID"=="NA"] <- NA

什么都不做。条件"ID"=="NA" 始终为FALSE,因为您正在比较两个不相等的字符串文字("ID""NA")。要修复它,请使用例如

data[data$ID == "NA", "ID"] <- NA

【讨论】:

  • 谢谢。虽然我得到了错误(数据集总共有 167 行):Error: Must assign to columns with a valid subscript vector. i Logical subscripts must match the size of the indexed input. x Input has size 2 but subscript data$ID == "NA"` has size 167.`
  • @C.Sebastian 是的,我的代码完全错误,对此感到抱歉。尽管如此,还是有两个人投了赞成票!现在更正了。
【解决方案2】:

欢迎来到 SO!使用它来使 NA 发生突变,然后删除 NA:

data <- data %>% 
  mutate(ID = ifelse(ID == "NA",NA,ID)) %>%
  filter(!is.na(ID))

【讨论】:

  • 谢谢。这行得通!一个问题也可能是我在这里用 ID 代理的列名最初由两个词组成,即“标识符号”。因此,我尝试了“标识符号”而不是代码中的 ID,似乎 dplyr 不喜欢这种列名方式。
  • 不客气。不要忘记验证答案之一@C.Sebastian
  • @C.Sebastian 抱歉,没有注意您回答的最后一部分。使用`identifer number`使其工作
【解决方案3】:

为什么不直接

data %>%
  filter(ID != "NA")

subset(data, ID != "NA")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2021-05-13
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多