首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Inf (数字)写入excel并读回R。Inf是字符,而不是数字。

将Inf (数字)写入excel并读回R。Inf是字符,而不是数字。
EN

Stack Overflow用户
提问于 2019-07-21 10:06:44
回答 1查看 604关注 0票数 1

在将Inf (作为numeric)写入excel之后,我再次读取它,并将Inf作为Char。对于NaN,它变成了NA。对于NA,它仍然是NA as numeric,这是理所当然的。

我同时使用了readxlwritexl。我尝试安装tibble,但失败了。

代码语言:javascript
复制
library(readxl)
library(writexl)

x <- c(1,NA)
y <- c(2,NaN)
z <- c(3,Inf)

d0 <- data.frame(x,y,z)

write_xlsx(d0, 'Test.xlsx')
d1 <- read_xlsx('Test.xlsx')

str(d0$x)
str(d0$y)
str(d0$z)

str(d1$x)
str(d1$y)
str(d1$z)

下面是结果:注意NaN变成了NAInf (numeric)变成了Inf (character)

代码语言:javascript
复制
> str(d0$x)
 num [1:2] 1 NA
> str(d0$y)
 num [1:2] 2 NaN
> str(d0$z)
 num [1:2] 3 Inf

> str(d1$x)
 num [1:2] 1 NA
> str(d1$y)
 num [1:2] 2 NA
> str(d1$z)
 chr [1:2] "3" "Inf"

我正在寻找在写入和读取阶段的解释和补救措施。我并不是在阅读之后寻找解决方案,比如设置as.numeric(d1$z)。我正在使用相同的R代码验证第三方输出的数据集。

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2019-07-21 17:57:36

有关更多信息,请参阅this关于excel中的无穷大的问题。无穷大在excel中不可用。在写入excel之前,可以将Inf值设置为.Machine$double.xmax。这将在excel中表示为#NULL!。但再次读取#NULL!将自动表示为R中的Inf。奇怪的是,-Inf在excel中表示为相同的值#NULL!

代码语言:javascript
复制
library(readxl)
library(writexl)

d0 <- data.frame(x = c(1, NA),
                 y = c(2, NaN),
                 z = c(3, Inf),
                 z1 = c(4, -Inf))

d0[d0 == Inf] <- .Machine$double.xmax 
d0[d0 == -Inf] <- .Machine$double.xmax * -1


write_xlsx(d0, 'Test.xlsx')
d1 <- read_xlsx('Test.xlsx')
d1

# A tibble: 2 x 4
      x     y     z    z1
  <dbl> <dbl> <dbl> <dbl>
1     1     2     3     4
2    NA    NA   Inf  -Inf

如果您需要查看excel中的数字,则必须将Inf值替换为9.99999E+307,并在将数据读回R后将此数字替换回Inf

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57129856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档