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

标签 r data.table

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

相关文章:

R 函数根据另一组值评估 data.table 列中的值

r - R 中的 For 循环在打印中返回 NA

r - SVM 性能与 AUC 分数不一致

r - 在 R : Send a modified windows command to fread() 中

r - 在 data.table 上按周期分组重复

r - 在 R 中组合 %like% 和 %in% 运算符

r - ggplot2 中辅助 y 轴的更好转换

r - 溢出 X 轴 (ggplot2)

r - 如何使用 SF 包计算质心和多边形边缘之间的最大距离?

python - 在 Pandas 的一个聚合中使用多个 idxmin() 和 idmax() 进行多重索引