【问题标题】:Making a selection of multiple NA's in different rows und colums of a dataframe在数据帧的不同行和列中选择多个 NA
【发布时间】:2018-08-24 09:31:02
【问题描述】:

我有一个包含 12000 行和 35 列的数据框,在不同的行或列中有多个 NA。

我想创建一个 ifelse 函数来选择并将它们更改为一个值(如“0”或“9999”)。

我的问题是is.na(dataframe)似乎不适用于整个数据框,但我对为每个单独的列进行选择并不感兴趣。

有没有更好的办法?

【问题讨论】:

  • data[is.na(data)] <- 0,这是怎么回事?你能发布一个例子或预期的输出吗?
  • NA 实际上是 NaN .. 也许这可能是问题所在?
  • 您似乎更有可能拥有字符串值,例如"NA",而不是NANaN 值应该以同样的方式处理。这是一个小例子data = data.frame(x1 = c(1,2,3,4), x2 = c(1,NA,2,NA), x3 = as.character(c("NaN",2,"NA",4)), x4 = c(NaN, 2,3,NA), stringsAsFactors = F); data[is.na(data)] <- 0。你能确定你的专栏是numeric吗? @RLave 的建议应该有效,除非您有字符串值...

标签: r dataframe selection na


【解决方案1】:
library(dplyr)

data <- tibble(a = c(1, NA, 2), b = c(NA,1,2)) # let's create some data
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1    NA
2    NA     1
3     2     2

data[is.na(data)] <- 0
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     0
2     0     1
3     2     2

或者NaN:

data <- tibble(a = c(1, NaN, 2), b = c(NaN,1,2))
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1   NaN
2   NaN     1
3     2     2

data[is.na(data)] <- 0 # still works the same 
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     0
2     0     1
3     2     2

如果您有 "NA" 作为字符串:

data <- tibble(a = c(1, "NA", 2), b = c("NA",1,2))
data[data=="NA"] <- NA # first fix and bring all to "true" NA
data[is.na(data)] <- 0 # still works the same 
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     0
2     0     1
3     2     2

【讨论】:

    【解决方案2】:

    dplyr 解决方案:

    对于NANaN

    df <- tibble(a = c(1, NaN, 2), b = c(NA,1,2))
    
    df %>% 
      replace(is.na(.), 0)
    
    # A tibble: 3 x 2
          a     b
      <dbl> <dbl>
    1    1.    0.
    2    0.    1.
    3    2.    2.
    

    对于"NA""NaN" 作为字符串:

    df <- tibble(a = c(1, "NaN", 2), b = c("NA",1,2))
    
    df %>% 
        mutate_all(funs(replace(., .=="NaN", 0))) %>% 
        mutate_all(funs(replace(., .=="NA", 0))) %>% 
        mutate_all(funs(as.numeric))
    
    # A tibble: 3 x 2
          a     b
      <dbl> <dbl>
    1    1.    0.
    2    0.    1.
    3    2.    2.
    

    【讨论】:

      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 2020-11-06
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多