gpt4 book ai didi

r - 如何使用 fread 将制表符分隔的文件读入 data.table?

转载 作者:行者123 更新时间:2023-12-04 10:36:36 24 4
gpt4 key购买 nike

示例数据 ( emp.data )

Beth  4.00  0
Dan 3.75 0
Kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18

我可以把它读成 data.frame使用 read.table ,然后将其转换为 data.table :
library(data.table)
df <- read.table("emp.data", col.names = c("Name", "PayRate", "HoursWorked"))
DT <- as.data.table(df, key = HoursWorked)

计算工资(过滤掉零小时):
DT[HoursWorked > 0, .(Name, Pay = PayRate * HoursWorked),]

Name Pay
1: Kathy 40.0
2: Mark 100.0
3: Mary 121.0
4: Susie 76.5

效果很好;但是,我认为转换还有一个额外的步骤。因为有 fread()data.table ,为什么不直接使用呢?
readDT <- fread("emp.data", header=FALSE, sep="\t")

V1
1: Beth 4.00 0
2: Dan 3.75 0
3: Kathy 4.00 10
4: Mark 5.00 20
5: Mary 5.50 22
6: Susie 4.25 18

str(readDT)
Classes 'data.table' and 'data.frame': 6 obs. of 1 variable:
$ V1: chr "Beth 4.00 0" "Dan 3.75 0" "Kathy 4.00 10" "Mark 5.00 20" ...
- attr(*, ".internal.selfref")=<externalptr>

数据被识别为一列;显然这行不通。

问题

如何使用 fread() 读取这些数据正确吗? (如果可能,也设置列名。)

最佳答案

最近在开发版本 v1.9.5 中已修复此问题(很快将在 CRAN 上以 v1.9.6 的形式提供):

require(data.table) # v1.9.5+
fread("~/Downloads/tmp.txt")
# V1 V2 V3
# 1: Beth 4.00 0
# 2: Dan 3.75 0
# 3: Kathy 4.00 10
# 4: Mark 5.00 20
# 5: Mary 5.50 22
# 6: Susie 4.25 18

README.md在项目页面了解更多信息。 fread获得 strip.white参数(在其他功能/错误修复中)默认为 TRUE .

更新:它还有 col.names现在论证:
fread("~/Downloads/tmp.txt", col.names = c("Name", "PayRate", "HoursWorked"))
# Name PayRate HoursWorked
# 1: Beth 4.00 0
# 2: Dan 3.75 0
# 3: Kathy 4.00 10
# 4: Mark 5.00 20
# 5: Mary 5.50 22
# 6: Susie 4.25 18

关于r - 如何使用 fread 将制表符分隔的文件读入 data.table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31959650/

24 4 0