【问题标题】:create and name NA indicator variables for a large data frame为大型数据框创建和命名 NA 指标变量
【发布时间】:2014-02-18 20:03:19
【问题描述】:

好的,我很接近。一切正常,但 compound 的最后一个循环我被数据类型问题挂断了。随心所欲地复制并运行。

x <- c(1:12)
dim(x) <- c(3,4)
x[2,2] <- NA
x[3,3] <- NA
colnames(x) <- c("A","B","C","D")

x

newframe <- data.frame(matrix(0, ncol = 4, nrow = 3))

for (i in 1:3)
  for (j in 1:4)
  { newframe[i,j] <-  (1 -1*(is.na(x[i,j]))) }

newframe <- as.matrix((newframe))

newframe

compound <- data.frame(matrix(0, ncol = 4, nrow = 3))

for (i in 1:3) 
  for (j in 1:4 )
  {  compound[i,j] <- (as.numeric(x[i,j])*(as.numeric(newframe[i,j])))
}

compound

我正在尝试为空实例创建一个指示器变量,并使用它来创建一个复合变量,该变量将在为空时将原始变量归零并闪烁指示器。

【问题讨论】:

  • 你真的要测试整列是不是NA?请提供一个可重现的例子。
  • OP,关于您的代码 - 尝试运行 NA == NA,然后阅读 ?is.na
  • 一步一步。你甚至还没有了解到x==NA 总是返回NA。在发布此类基本内容之前,您真的应该阅读 R 教程。
  • 我写了伪代码,先生们,所以对 R 语法的批评是不恰当的。我已将其更改为上面的 is.na 以免混淆。目标是仅当向量的实例为 NA 时才创建虚拟对象,而不是整个对象。
  • 将在上午发布答案 # 创建数据 x

标签: r indicator


【解决方案1】:

为缺失的实例创建指标变量,并将原始数据中的 NA 实例的值归零或插补:

# create data
x <- c(1:12)
dim(x) <- c(3,4)
x[2,2] <- NA
x[3,3] <- NA

x

# create data frame for indicator var's
newframe <- 1*(is.na(x))

newframe
class(newframe)

# zero out NAs in data, or alternatively replaced with imputed values
x[is.na(x)] <- 0

# create data frame for original data and indicator var's
newdata <- cbind(x, newframe)

newdata 

复制并运行。

【讨论】:

  • 我不明白,这是你的解决方案?或者这就是你的脚本?
  • @Llopis 是的,这是一个有效的玩具版本,这是人们似乎喜欢看到的。我回答了我自己的问题(“边做边学”)。我对 R 很陌生。谢谢
  • @Elliott;感谢您的解决方案。请注意,您不需要在填充它们之前创建 data.frames newframe 和 newdata。
  • 如果这回答了问号,那么其他人知道如何解决您的问题。
【解决方案2】:

这是你要找的吗?

compound <- x
compound[is.na(x)] <- 0
compound
     A B C  D
[1,] 1 4 7 10
[2,] 2 0 8 11
[3,] 3 6 0 12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2015-11-14
    • 2014-12-08
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多