如果一个案例有缺失值而另一个变量有观测值,如何在 R 中创建 returns 1 的新变量?

How to create a new variable in R that returns 1 if a case has a missing value while another variable has an observed value?

我有两个包含缺失数据的变量 loonprofstat。为了更好地了解缺失和需要估算的数据,我想在数据框中创建一个额外的变量 problem,如果 1 每个案例 return =12=] 缺失,观察到 profstat,否则为 0。我生成了以下代码,它只给我输出 x[] = 1。这个问题有什么解决办法吗?

 {
  problem <- dim(length(t))
  for (i in 1:nrow(dflapopofficial))
  {
    if (is.na(dflapopofficial$loon[i])==TRUE & is.na(dflapopofficial$profstat[i])==FALSE) {  
      dflapopofficial$problem[i]=1
    } else {
      dflapopofficial$problem[i]=0
    }
    return(problem)
  }

这里有一些地方可以改进:

  1. 请记住,R 中的许多操作都是矢量化的。在进行逻辑检查等时,您不需要遍历向量中的每个元素。
  2. is.na(some_condition) == TRUEis.na(some_condition) 相同,is.na(some_condition) == FALSE!is.na(some_condition)
  3. 相同
  4. 如果你想在一个数据框中写一个新列,并且你指的是那个数据框中的几个变量,使用 within 可以节省你大量的输入 - 特别是如果你的数据框有一个长名称
  5. 您正在返回 problem,但在您的循环中,您正在写入 dflapipofficial$problem,这是一个不同的变量。
  6. 如果要写入 1 和 0,可以使用 +(logical_vector)
  7. 将逻辑隐式转换为数字

将所有这些放在一起,您可以用一行替换整个循环:

within(dflapopofficial, problem <- +(is.na(loon) & !is.na(profstat)))

记得将结果存储到数据框或它的副本中,例如

df <- within(dflapopofficial, problem <- +(is.na(loon) & !is.na(profstat)))

所以 df 只是 dflapopofficial 的虚幻与你的额外专栏。