转换NaN为NA

时间:2018-07-01 12:33:54

标签: r nan tibble

我已经使用readr包导入了产生小标题的.csv(我们称之为x)。

编辑:由于阅读器生成的实际标记与下面发布的problems(x)标记之间存在混淆,因此这是实际标记的开始会产生问题

> x
# A tibble: 46,080 x 18
      x_1   x_2   x_3   x_4   x_5   x_6    x_7     x_8    x_9     x_10      x_11        x_12        x_13      x_14  x_15
    <int> <int> <int> <int> <int> <dbl>  <dbl>   <dbl>  <dbl>    <dbl>     <dbl>       <dbl>       <dbl>     <dbl> <int>
 1     1     1     1     1    29  84.4   72.5  10.1     48.5     35.3      34.2        293.        117.      24.5    20
 2     1     1     1     2   120 214.   142.   -0.488   55.8     42.1      36.3        589.        124.     257.     84
 3     1     1     1     3    28 258.    42.3   2.09    43.7     29.2      32.1        352.        117.      72.2    19
 4     1     1     1     4    39 623.   249.   12.1     95.7     75.7      58.6        998.        176.     243.     14
 5     1     1     1     5   222 320.   244.   -2.10    70.7     51.4      48.4       1232.        242.     711.    111
 6     1     1     1     6    33 485.   142.   12.3     61.8     51.9      34.6        764.        117.     160.     24
 7     1     1     1     7    32 884.   458.   11.0    110.      88.1      64.5       1525.        237.     283.      5
 8     1     1     1     8    58 695.   187.  -12.7     64.6     50.5      41.7       1090.        175.     403.     37
 9     1     1     2     1    46  58.0   65.3   5.10    49.4     35.2      34.7        234.        117.      26.7    18
10     1     1     2     2   136 217.   191.   -0.431   60.5     43.2      42.2        706.        185.     295.     72
# ... with 46,070 more rows, and 3 more variables: x_16 <dbl>, x_17 <dbl>, x_18 <dbl>

为了避免错误地读取数据,我尝试了na =的{​​{1}}属性的各种组合,但是,对于我的情况,我没有使它起作用: 使用readr软件包时,某些列中出现了有关问题的消息,因此我使用read_csv来了解发生了什么。这是输出:

>problems(x)

我确实知道,显然在几列和几行中,.csv读取失败,这导致在期望整数的字段中出现NaN。

我尝试通过使用> problems(x) # A tibble: 264 x 5 row col expected actual file <int> <chr> <chr> <chr> <chr> 1 1992 x_5 an integer NaN 'raw-data/x.csv' 2 1992 x_15 an integer NaN 'raw-data/x.csv' 3 2320 x_5 an integer NaN 'raw-data/x.csv' 4 2320 x_15 an integer NaN 'raw-data/x.csv' 5 2581 x_5 an integer NaN 'raw-data/x.csv' 6 2581 x_15 an integer NaN 'raw-data/x.csv' 7 2582 x_5 an integer NaN 'raw-data/x.csv' 8 2582 x_15 an integer NaN 'raw-data/x.csv' 9 2583 x_5 an integer NaN 'raw-data/x.csv' 10 2583 x_15 an integer NaN 'raw-data/x.csv' # ... with 254 more rows 方法将那些NaN转换为“真实” NA,但这失败了,因为该方法似乎不支持全部小标题。

is.nan

我还尝试过使用> x[is.nan(x)] <- NA #convert NaN to NA Error in is.nan(x): default method not implemented for type 'list' 包中的replace_with_na_all方法,但这也失败了

naniar

因此,我正在寻找一种方法来一次性转换所有列和所有行中具有Na的 all NaN,或者避免在> replace_with_na_all(data = x, condition = ~.x == NaN) Error in .x[sel] <- map(.x[sel], .f, ...) : NAs are not allowed in subscripted assignments 期间一起创建NaN。

1 个答案:

答案 0 :(得分:0)

尽管这只是对我自己问题的部分回答(它不会告诉您如何将NaN转换为NA),但我想指出一个可能的解决方案,以防万一问题是由相同的根引起的。

我想用readr导入的.csv由Matlab写出,并在Matlab中值为NaN的单元格中包含字符串NaN。因此,不是R遇到数字识别问题,而是NaN包含为字符串的问题。

使用na = "NaN"中的read_csv属性显然可以解决问题。