【问题标题】:delete rows matrix R containing NaN删除包含 NaN 的行矩阵 R
【发布时间】:2023-03-20 08:15:01
【问题描述】:

我使用以下方法将表格导入 R:

mydata = read.csv("mydata.csv")

表格的某些单元格未定义,我将它们转换为 NaN。

mydata[mydata == "<undefined>"] <- NA

我想为第 4 列查找包含 NaN 的行的索引并删除相应的行(跨所有表)。

你能帮帮我吗?

在 matlab 中我会这样做:

idx_rows_nan = find(isnan(mydata(:,4)));
mydata(idx_rows_nan,:)=[];

【问题讨论】:

  • 只过滤而不是删除:m[!is.na(m[,4]),]
  • NANaN 不同。
  • @Roland 我的意思不是数字...
  • 我知道NaN 是什么意思。但是您在代码中分配了NA,这可能就是您想要的。
  • NA 表示缺失值。它总是有一个类型(例如,characternumeric)。这通常是你想要的。你似乎知道NaN 表示什么。阅读help("NA")help("NaN")

标签: r matrix nan


【解决方案1】:

试试is.na()(带点)

mydata[!is.na(mydata[,4]),]

分两步,首先可以通过定义逻辑向量na_rows来识别第4列中包含NA的行:

na_rows <- is.na(mydata[,4])

第4列带有NA的行号可以用which(na_rows)显示

然后可以删除这些行

mydata <- mydata[!na_rows,]

如果要识别NaN条目而不是NA,可以使用函数is.nan()

【讨论】:

  • 您好,谢谢。我想有一个两步的方法,因为我有兴趣查看 indeces
  • 我不会使用-,因为如果第4 列中没有NaN,这可能会返回0 行。使用! 可能会更好。例如,mydata &lt;- data.frame(Col1= 1:4);mydata[-is.nan(mydata[,1]),, drop=FALSE] #[1] Col1 #&lt;0 rows&gt; (or 0-length row.names); mydata[!is.nan(mydata[,1]),, drop=FALSE]
  • 正如 Roland 所指出的,我应该找到 NA 值...不是 NaN...对不起...是否有 is.missing 函数?
  • 它与is.na() 的工作方式相同(末尾没有“n”)。
  • 如果 mydata[!is.na(mydata[,4]),]which(is.na(mydata[,4]) 没有产生预期的结果,我建议您发布数据样本。这可能是变量类的问题,它可能有助于查看数据的结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 2017-01-15
  • 1970-01-01
  • 2012-06-17
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多