将 txt 文件导入或解析为 R 中的数据框
Import or parse a txt file into a dataframe in R
我正在尝试将文本文件导入数据框。文本文件中的记录由 56 个破折号分隔。该文件如下所示:
--------------------------------------------------------
Record: 1
ColumnTitleABC: string of text
ColumnTitleDEFG: string of text
--------------------------------------------------------
Record: 2
ColumnTitleABC: string of text
ColumnTitleDEFG: string of text
--------------------------------------------------------
我试过使用 read_delim("TextFileName.txt", delim = ":")
。
它只是 returns 没有文本字符串的列标题。有没有更好的 R 函数来读取这种类型的文本文件?或者在将其移动到数据帧之前,可能会有某种方法在 R 中对其进行解析?
我希望最终结果是这样的数据框:
Record ColumnTitleABC ColumnTitleDEFG
1 string of text string of text
2 string of text string of text
在将数据转换为可用格式之前,您需要对数据进行一些预处理。
lines <- readLines('data.txt')
do.call(rbind, by(lines, cumsum(grepl('------', lines)), function(x) {
x <- x[-1]
name <- sub(':.*', '', x)
value <- sub('.*:', '', x)
setNames(as.data.frame(t(value)), name)
})) -> result
result
# Record ColumnTitleABC ColumnTitleDEFG
#1 1 string of text string of text
#2 2 string of text string of text
cumsum(grepl('------', lines))
将创建将一条记录与另一条记录分开的组。
x <- x[-1]
已完成,因为每个组中的第一个值只是 ------
行,因此我们将其删除。
name <- sub(':.*', '', x)
删除冒号后的所有内容以获取列名。
value <- sub('.*:', '', x)
删除冒号前的所有内容以获取值。
setNames(as.data.frame(t(value)), name)
创建一个 1 X 3 数据框。
我正在尝试将文本文件导入数据框。文本文件中的记录由 56 个破折号分隔。该文件如下所示:
--------------------------------------------------------
Record: 1
ColumnTitleABC: string of text
ColumnTitleDEFG: string of text
--------------------------------------------------------
Record: 2
ColumnTitleABC: string of text
ColumnTitleDEFG: string of text
--------------------------------------------------------
我试过使用 read_delim("TextFileName.txt", delim = ":")
。
它只是 returns 没有文本字符串的列标题。有没有更好的 R 函数来读取这种类型的文本文件?或者在将其移动到数据帧之前,可能会有某种方法在 R 中对其进行解析?
我希望最终结果是这样的数据框:
Record ColumnTitleABC ColumnTitleDEFG
1 string of text string of text
2 string of text string of text
在将数据转换为可用格式之前,您需要对数据进行一些预处理。
lines <- readLines('data.txt')
do.call(rbind, by(lines, cumsum(grepl('------', lines)), function(x) {
x <- x[-1]
name <- sub(':.*', '', x)
value <- sub('.*:', '', x)
setNames(as.data.frame(t(value)), name)
})) -> result
result
# Record ColumnTitleABC ColumnTitleDEFG
#1 1 string of text string of text
#2 2 string of text string of text
cumsum(grepl('------', lines))
将创建将一条记录与另一条记录分开的组。x <- x[-1]
已完成,因为每个组中的第一个值只是------
行,因此我们将其删除。name <- sub(':.*', '', x)
删除冒号后的所有内容以获取列名。value <- sub('.*:', '', x)
删除冒号前的所有内容以获取值。setNames(as.data.frame(t(value)), name)
创建一个 1 X 3 数据框。