【问题标题】:How to handle NAs while assigning values如何在赋值时处理 NA
【发布时间】:2020-09-23 12:28:55
【问题描述】:

我有一个数据框x,其中包括两个变量fdhm1fdhm2。现在,我想根据fdhm1fdhm2 的值生成一个新变量fdhm

具体来说,如果fdhm1 != NA fdhm2 ==0fdhm <- fdhm1。否则,fdhm <- NA

这是我的代码:

fdhm   <- NA
x   <- cbind(x,fdhm)
use   <- x$fdhm1 != NA & x$fdhm2 == 0
x$fdhm[use]   <- x$fdhm1[use]

但是弹出了一条错误消息,说NAs are not allowed in subscripted assignments

不知道是什么原因?

【问题讨论】:

  • 我已经通过重写条件use &lt;- x$fdhm2 == 0 &amp; !is.na(x$fdhm2) &amp; !is.na(x$fdhm1)解决了这个问题@
  • 不应该是在== 0之前询问!NA的条件,比如use &lt;- !is.na(x$fdhm2) &amp; x$fdhm2 == 0 &amp; !is.na(x$fdhm1)

标签: r


【解决方案1】:

你可以试试!is.na(x$fdhm1)(而不是x$fdhm1 != NA),例如,

x <- within(x,fdhm <- ifelse(!is.na(fdhm1)&fdhm2==0,fdhm1,NA))

这是一个向您展示发生了什么的示例。

给定一个向量u,如下所示

> u
[1] NA  2 NA  1 NA

然后

> u!=NA
[1] NA NA NA NA NA

> !is.na(u)
[1] FALSE  TRUE FALSE  TRUE FALSE

【讨论】:

  • 由于NA 表示缺失值,涉及NA 的逻辑运算通常被硬编码为返回NA 而不是TRUEFALSE
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多