【问题标题】:Assign values based on NA in other two variables of a data frame在数据框的其他两个变量中基于 NA 赋值
【发布时间】:2015-03-31 14:57:07
【问题描述】:

给定一个 data.frame,如果 var1 和 var2 同时(意味着在同一行)缺失值,我会尝试将 var4 的值分配给 var3,否则 var3 会保留自己的值。

我试过了,但它不起作用,有什么建议吗?非常感谢。

aaa<-function(x) {
  ifelse((is.na(x$var1)&is.na(x$var2)),
                x$var3<-x$var4, x$var3<-x$var3)
  return(x)
}

例如:

var1  var2  var3  var4
NA    NA    NA   1.610
 5    NA     4    6
 2     1    3.5   NA
 1    1.5   2.5   3

我希望:

var1  var2  var3  var4
NA    NA   1.610 1.610
 5    NA     4    6
 2     1    3.5   NA
 1    1.5   2.5   3

【问题讨论】:

  • 可能只是indx &lt;- (is.na(x$var1) &amp; is.na(x$var2)) ; x[indx, "var3"] &lt;- x[indx, "var4"]。其中x 是您的数据框。
  • @UmbertoMedicamento 你的 ifelse 函数可以是aaa &lt;- function(x) { x[,'var3'] &lt;-with(x, ifelse(is.na(var1) &amp; is.na(var2), var4, var3)); x}; aaa(df)
  • @David Arenburg 有意思,你能解释一下吗?无论如何,我试过了,但它不起作用。我的数据都是数字。
  • 究竟是什么不工作?它适用于提供的数据。

标签: r na


【解决方案1】:

这里不需要ifelse,因为您的“否”声明没有做任何事情。您需要做的就是找到正确的行并替换它们,同时保持其余所有内容不变。这是一个简单的基本 R 方法

indx <- with(df, is.na(var1) & is.na(var2))
df[indx, "var3"] <- df[indx, "var4"]

不过,为了提高效率和减少击键次数,我建议使用data.table 包并通过引用更新值

library(data.table)
setDT(df)[is.na(var1) & is.na(var2), var3 := var4]

【讨论】:

  • @David Arenburg 我的错,它有效。我不知道data.table,有用。我想知道我能像你们一样学会用 R 变得如此聪明!谢谢
  • 一切都取决于经验,你会到达那里。
猜你喜欢
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多