【问题标题】:How to filter out NA values in a specific column of data.matrix? (data with hierarchy)如何过滤掉data.matrix特定列中的NA值? (具有层次结构的数据)
【发布时间】:2026-01-31 23:35:02
【问题描述】:

我有一个 data.matrix df,我想过滤掉 col1 列的 NA 值。我测试了不同的方法,但总是出错。

列中的唯一值:

> unique(df$test_data$col1)
[1] "not_finished" "finished"     NA

这是我尝试过的:

df %>% filter(!is.na(test_data$col1))

错误:

data.matrix(data) 中的错误: 'list' 对象不能被强制输入 'double'

df[!is.na(test_data$col1)]

错误:

test_data$col1 中的错误: $ 运算符对原子向量无效

df[!is.na(test_data.col1)]

错误:

[.data.frame(df, !is.na(test_data.col1)) 中的错误: 找不到对象“test_data.col1”

更新:

dput(df$test_data)

structure(list(col1 = c("not_finished", "finished", 
"not_finished", NA, NA), incident = c("NA", 
"NA", "INC-6033", "NA", "NA"), reason = c("NA", "NA", "False Positive", 
"NA", "NA")), class = "data.frame", row.names = c(NA, 100L))

【问题讨论】:

  • 你能提供dput(df)吗? - 很难确切地知道对象的结构在这里。
  • @thelatemail:请查看我的更新。 data.matrix 很大。因此我只从df$test_data中提取了5条记录。
  • 也许可以试试df$test_data[which(!is.na(df$test_data$col1)),]

标签: r


【解决方案1】:

首先,检查你的数据集中是否有NAs

test <- c(1,2,3,NA)
is.na(test)

如果要删除包含NA 的行,可以使用na.omit()。 但是,如果您希望将NA 替换为不同的值,则可以使用ifelse()。例如

df$col1 <- ifelse(is.na(df$col1), "I used to be NA", df$col1)

这会将NA 的每个实例替换为I used to be NA,否则保留原始值。当然,如果要删除或替换,这取决于您的用例。

【讨论】:

  • 谢谢。是的,is.na(..) 对某些行返回 TRUE。根据我的任务,我需要在col1 列中获取一个不包含 NA 的新 data.matrix。您能否说明如何在我的情况下使用na.omit
  • 这取决于你想对你的数据做什么——你想删除所有有NA的行,还是你想用其他数据替换NA
  • 正如我在问题中所说,我想“过滤掉”这些记录。但是我已经通过使用 cmets 中指示的“which”来做到这一点。谢谢。
最近更新 更多