导入由新行分隔的文本文件

Import text file separated by new line

最终,我需要创建以下 table:

ID Age Gender
1  25  F
2  14  M

等等。 . .

我在很多txt文件中获取了我的数据,其中ID是文件名。 年龄和性别用换行分隔,例如:

Age: 25
Gender: F

现在,我将所有文件合并为一个数据table,文件路径作为ID列(稍后我会用stringr去掉整个路径)

all_test <- list.files(path = "my/file/path", full.names=T)
dtt <- rbindlist( sapply(all_test, fread, simplify = FALSE, sep=":", sep2=" "),use.names = TRUE, idcol = "ID" )

这是我的问题 - 我得到以下 table:

ID V1     V2
1  Age    25
2  Gender F

我尝试使用 sep = "\n" 但它什么也没做。我如何告诉 R 每个变量在不同的行中? (最好用data.table)

一种可能的方法是使用 dcast 重塑为宽格式并使用 type.convert 将列置于右侧 类:

DTnew <- dcast(DT, ID ~ V1, value.var = 'V2')[, (2:3) := lapply(.SD, type.convert), .SDcols = 2:3][]

给出:

> DTnew
   ID Age Gender
1:  1  25      F
2:  2  14      M

> str(DTnew)
Classes ‘data.table’ and 'data.frame':    2 obs. of  3 variables:
 $ ID    : int  1 2
 $ Age   : int  25 14
 $ Gender: Factor w/ 2 levels "F","M": 1 2
 - attr(*, ".internal.selfref")=<externalptr> 
 - attr(*, "sorted")= chr "ID"

示例数据:

DT1 <- fread('Age: 25
              Gender: F', sep = ':')
DT2 <- fread('Age: 14
              Gender: M', sep = ':')
DT <- rbindlist(list(DT1, DT2), idcol = 'ID')