【问题标题】:Converting NA values in a dataframe to an arbitrary integer with for loop and if statement使用for循环和if语句将数据框中的NA值转换为任意整数
【发布时间】:2023-02-24 15:23:20
【问题描述】:

我想将我在数据帧d1 下的 NA 值转换为像 13 这样的整数值,但似乎我的 for 循环和 if 语句不起作用。 如果有人能帮助我,我将不胜感激。

L3 <- LETTERS[1:3]
fac <- sample(L3, 10, replace = TRUE)
d <- data.frame(x = 1, y = 1:10, fac = fac)

d1 <- d
d1$x[1:3] <- NA
d1$y[4:6] <- NA
d1$fac[7:10] <- NA

for (i in 1:nrow(d1)){
  for (j in 1:ncol(d1)){
    if (is.na(d1[i,j]) == TRUE) {
      (d1[i,j]) == 13
    }
  }
}

【问题讨论】:

  • 简单的方法是d1[is.na(d1)] &lt;- 13for 的主要问题:使用d1[i,j] &lt;- 13 而不是(d1[i,j]) == 13。后者是一个逻辑条件。

标签: r dataframe na


【解决方案1】:

可能是由于错字。

L3 <- LETTERS[1:3]
fac <- sample(L3, 10, replace = TRUE)
d <- data.frame(x = 1, y = 1:10, fac = fac)
d1 <- d
d1$x[1:3] <- NA
d1$y[4:6] <- NA
d1$fac[7:10] <- NA

for (i in 1:nrow(d1)){
  for (j in 1:ncol(d1)){
    if (is.na(d1[i,j])) {
      d1[i,j] <-  13
    }
  }
}

结果

d1
#>     x  y fac
#> 1  13  1   A
#> 2  13  2   B
#> 3  13  3   C
#> 4   1 13   B
#> 5   1 13   A
#> 6   1 13   B
#> 7   1  7  13
#> 8   1  8  13
#> 9   1  9  13
#> 10  1 10  13

创建于 2023-02-24 reprex v2.0.2

【讨论】:

    猜你喜欢
    • 2021-07-08
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2019-05-30
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多