导入由新行分隔的文本文件
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')
最终,我需要创建以下 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')