3

最终,我需要创建下表:

ID Age Gender
1  25  F
2  14  M

等等。. .

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

Age: 25
Gender: F

现在,我将所有文件合并到一个数据表中,其中文件路径作为 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" )

这是我的问题 - 我得到下表:

ID V1     V2
1  Age    25
2  Gender F

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

4

1 回答 1

4

一种可能的方法是将列重塑为宽格式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')
于 2018-04-01T09:15:13.233 回答