我生成了一个数据框,其中包含 37 个变量的 9829 个观测值,并使用 write_csv 保存它。
使用 read_csv 加载此数据框时,如果其值为 float ,则一列被标记为 int,这会导致该列中的所有浮点值都设置为 NA。
经过仔细调查,问题似乎在于该列中的前 4000 个观测值是 0,没有数字,这似乎是读取功能的问题。
解决此问题的一个快速方法是在保存之前按照导致问题的列对数据帧进行降序排序。但这不是一个有效的解决方案,因为将来我可能会有不止一篇专栏讨论这个问题。
问题:有没有办法设置 write_csv 以 2 位精度将所有项目写入 float 列中?或者自动修复问题
谢谢
编辑
library(tidyverse)
col1 <- c(c(0:5000), c(2.1,3.5))
df <- data.frame(col1)
write_csv(df, "./data_out/test/wrong_dataType_issue.csv")
df_read <- read_csv("./data_out/test/wrong_dataType_issue.csv")
summary(df_read)
col1
Min. : 0
1st Qu.:1250
Median :2500
Mean :2500
3rd Qu.:3749
Max. :4999
NA's :7
最佳答案
默认情况下,read_csv()
查看前 1,000 行数据。我建议this chapter R for Data Science 作为背景。该函数可能会错误地猜测。例如,我曾经有一个数据集,其中 gender
列被标记为逻辑,因为前 1,000 行都是女性,并且该函数将“F”解释为“FALSE”。有解决此问题的正确方法和快速方法。
快速方法
read_csv()
有一个名为 guess_max
的参数,用于设置要探索的行数。您可以使用类似的方法作为解决问题的一种巧妙方法...
read_csv("my_data.csv", guess_max = 9829)
这会强制 read_csv()
函数在猜测列类型之前查看数据集中的每个值。它可以解决您的问题,但将来可能会带来更多麻烦,特别是如果嵌入到底层数据可能会发生变化的 Shiny 应用程序中。
正确的方法
read_csv()
可以轻松显式定义所有列的数据类型。如果您想确保列 age
始终读取为数字,请使用类似以下内容...
read_csv("my_data.csv", col_types = cols(age = col_double())
关于r - 当列为 num 时,列被错误标记为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52521985/