![](/img/trans.png)
[英]Read xlsx file using data.table::fread(), but selecting the sheet
[英]How to read tab separated file into data.table using fread?
樣本數據( 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
我可以使用read.table
將其讀入data.frame
,然后將其轉換為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
這很好; 但是,我認為轉換還有一個額外的步驟。 由於data.table
有fread()
,為什么不直接使用它?
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()
讀取此數據? (如果可能,也要設置列名。)
最近在devel版本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
使用awk
刪除白色空格然后用fread
閱讀為我工作。
DT <- fread("awk '{$1=$1}1' emp.data")
DT
# 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
str(DT)
#Classes ‘data.table’ and 'data.frame': 6 obs. of 3 variables:
#$ V1: chr "Beth" "Dan" "Kathy" "Mark" ...
#$ V2: num 4 3.75 4 5 5.5 4.25
#$ V3: int 0 0 10 20 22 18
# - attr(*, ".internal.selfref")=<externalptr>
我能夠用OP的代碼復制同樣的問題
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.