示例数据 ( 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/