【问题标题】: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?如果一个案例具有缺失值而另一个变量具有观察值,如何在 R 中创建一个返回 1 的新变量?
【发布时间】:2021-01-08 00:03:54
【问题描述】:

我有两个包含缺失数据的变量loonprofstat。为了更好地了解丢失和需要估算的数据,我想在数据框中创建一个附加变量 problem,如果 loon 丢失和 profstat 将返回每个案例 1观察到,否则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)
  }

【问题讨论】:

标签: r na imputation


【解决方案1】:

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

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

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

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

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

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

所以df 只是 dflapopofficial 的一个 vopy 与您的额外列。

【讨论】:

  • 工作。非常感谢!
  • 新变量未附加到数据集。当我尝试查找此变量的频率时,它返回未找到问题
猜你喜欢
  • 2019-03-16
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多