gpt4 book ai didi

将(字母)数字字段正确读入 R

转载 作者:行者123 更新时间:2023-12-04 12:14:38 26 4
gpt4 key购买 nike

制表符分隔的文本文件,实际上是数据库表的导出(使用 bcp),具有以下形式(前 5 列):

102 1   01  e113c   3224.96     12  
102 1 01 e185 101127.25 12
102 2 01 e185 176417.90 12
102A 3 01 e185 26261.03 12

我尝试使用类似

的命令在 R 中导入它
data <- read.delim("C:\\test.txt", header = FALSE, sep = "\t")

问题是实际上是 varchar 字段(字母数字)的第 3 列被错误地读取为整数(因为整列中没有字母)并且前导零消失了。当我使用 odbcConnect 直接从数据库导入数据时,同样的事情发生了。该列再次被读取为整数。

str(data)
$ code: int 1 1 1 1 1 1 6 1 1 8 ...

如何在 R 中正确导入这样的数据集,以便能够在进行一些数据操作后再次安全地填充该数据库表?

编辑

我在 read.delim 中添加了以下参数

 colClasses = c("factor","integer","factor","factor","numeric","character","factor","factor","factor","factor","integer","character","factor")
  • 对于 varchar 字段,您建议使用“字符”还是“因子”?

  • 日期时间可以使用“字符”吗?

  • 我应该怎么做才能准确读取像 540912.68999999994 这样的数字字段而不是 540912.69?

我希望尽可能自动地创建该 colClasses 向量,具体取决于相关表架构中定义的数据类型。

最佳答案

Would you suggest "character" or "factor" for varchar fields?

正如 John 所提到的,这取决于使用情况。两者之间切换很简单,不用太担心。如果该列代表一个分类变量,它最终应该被视为一个因素。如果您打算挖掘文本(例如评论字段),那么 character 更有意义。

Is it ok to use "character" for datetime ones?

将日期存储在数据框中没问题,但如果您希望出于分析目的正确处理它们,则必须将其转换为 DatePOSIXct/POSIXlt 形式。

What should I do in order to be able to read a numeric field like this 540912.68999999994 exactly as is and not as 540912.69?

值以通常的 double 读入(大约 15 个 sig figs);在此特定示例中,540912.69 是您可以达到的最佳精度。比较

print(540912.68999999994)             # 540912.7
print(540912.68999999994, digits=22) # 540912.69
print(540912.6899999994) # 540912.7
print(540912.6899999994, digits=22) # 540912.6899999994

编辑:如果您需要更精确的数字,请使用 Rmpfr包。


I would like an -as automatic as possible- creation of that colClasses vector, depending on the datatypes defined in the relevant table's schema.

colClasses 的默认值(当您未指定它时)可以很好地猜测列应该是什么。如果您正在做类似使用 01 作为字符的事情,那么就没有办法明确指定它。

关于将(字母)数字字段正确读入 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2735537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com