在 R 中导入新文件类型
Import a new file type in R
我想创建一个将这个 syntax-type 文件导入 R 的函数。这些文件的格式如下:
!!!
!!!
!!!
!!!
!!!
!!!
!!!
!!!
**kern **dynam **kern **dynam <--------Here is determined the number of columns (4)
*staff2 * *staff1 *staff1/2
*>[A,A,B,B] * *>[A,A,B,B] *>[A,A,B,B]
*>norep[A,B] * *>norep[A,B] *>norep[A,B]
*>A * *>A *>A
*clefF4 * *clefG2 *clefG2
*k[b-] * *k[b-] *k[b-]
*F: * *F: *F:
*M3/4 * *M3/4 *M3/4
*MM108 * *MM108 *MM108
16r . 16f f
=1 =1 =1 =1
!LO:TX:b:i:t=legato ! ! !
12FL . 4cc .
12A . . .
12cJ . . .
. . (32bnqq/ .
12GL . 4cc) .
12B- . . .
12cJ . . .
. . (32bqLLL> .
. . 32ccq .
. . 32ddqJJJ .
12FL . 4cc) .
12A . . .
12cJ . . .
=2 =2 =2 =2
*Xtuplet * *Xtuplet *
因此,可以通过某种方式将文件转换为 csv 以导入到 R 中。每个文件的列数可能不同(通常为 1 到 50)。
我尝试了 data_imported<-import("sonata.krn", format = "csv")
但我收到以下错误:
Warning messages:
1: In fread(dec = ".", input = "son.krn", sep = "auto", header = "auto", :
Detected 1 column names but the data has 4 columns (i.e. invalid file). Added 3 extra default column names at the end.
2: In fread(dec = ".", input = "son.krn", sep = "auto", header = "auto", :
Stopped early on line 101. Expected 4 fields but found 5. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<4FF 4F . (<12g 12b-L 2ryy f>>
但是,文件的第一部分显示在控制台中。问题是我想使任务自动化,因此应该使用 R 中的函数删除 header...但是如果我无法导入此文件,那是不可能的。
提前致谢,有想法必打赏!
下面的代码将 header 作为命名字符向量导入,并将数据作为数据框导入。
fn <- "sonata.krn"
# Read all the lines
lines <- readLines(con = fn)
# Get the header and the data
start <- 1
while (grepl("^!!!", lines[start])) {
start <- start + 1
}
header <- lines[1:(start - 1)]
# Convert the header into a named vector
names(header) <- gsub("^!!!([[:alpha:][:digit:]]+):.*", "\1", header)
header <- gsub("^!!![[:alpha:][:digit:]]+: ", "", header)
# Lines containing the data
lines <- lines[-(1:(start - 1))]
# Substitute TABs for column delimiters
lines <- gsub(" +", "\t", lines)
# Import the data
d <- read.delim(textConnection(lines), sep = "\t",
stringsAsFactors = FALSE)
可能需要进行一些额外的数据清理,但这应该非常简单。
我想创建一个将这个 syntax-type 文件导入 R 的函数。这些文件的格式如下:
!!!
!!!
!!!
!!!
!!!
!!!
!!!
!!!
**kern **dynam **kern **dynam <--------Here is determined the number of columns (4)
*staff2 * *staff1 *staff1/2
*>[A,A,B,B] * *>[A,A,B,B] *>[A,A,B,B]
*>norep[A,B] * *>norep[A,B] *>norep[A,B]
*>A * *>A *>A
*clefF4 * *clefG2 *clefG2
*k[b-] * *k[b-] *k[b-]
*F: * *F: *F:
*M3/4 * *M3/4 *M3/4
*MM108 * *MM108 *MM108
16r . 16f f
=1 =1 =1 =1
!LO:TX:b:i:t=legato ! ! !
12FL . 4cc .
12A . . .
12cJ . . .
. . (32bnqq/ .
12GL . 4cc) .
12B- . . .
12cJ . . .
. . (32bqLLL> .
. . 32ccq .
. . 32ddqJJJ .
12FL . 4cc) .
12A . . .
12cJ . . .
=2 =2 =2 =2
*Xtuplet * *Xtuplet *
因此,可以通过某种方式将文件转换为 csv 以导入到 R 中。每个文件的列数可能不同(通常为 1 到 50)。
我尝试了 data_imported<-import("sonata.krn", format = "csv")
但我收到以下错误:
Warning messages:
1: In fread(dec = ".", input = "son.krn", sep = "auto", header = "auto", :
Detected 1 column names but the data has 4 columns (i.e. invalid file). Added 3 extra default column names at the end.
2: In fread(dec = ".", input = "son.krn", sep = "auto", header = "auto", :
Stopped early on line 101. Expected 4 fields but found 5. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<4FF 4F . (<12g 12b-L 2ryy f>>
但是,文件的第一部分显示在控制台中。问题是我想使任务自动化,因此应该使用 R 中的函数删除 header...但是如果我无法导入此文件,那是不可能的。
提前致谢,有想法必打赏!
下面的代码将 header 作为命名字符向量导入,并将数据作为数据框导入。
fn <- "sonata.krn"
# Read all the lines
lines <- readLines(con = fn)
# Get the header and the data
start <- 1
while (grepl("^!!!", lines[start])) {
start <- start + 1
}
header <- lines[1:(start - 1)]
# Convert the header into a named vector
names(header) <- gsub("^!!!([[:alpha:][:digit:]]+):.*", "\1", header)
header <- gsub("^!!![[:alpha:][:digit:]]+: ", "", header)
# Lines containing the data
lines <- lines[-(1:(start - 1))]
# Substitute TABs for column delimiters
lines <- gsub(" +", "\t", lines)
# Import the data
d <- read.delim(textConnection(lines), sep = "\t",
stringsAsFactors = FALSE)
可能需要进行一些额外的数据清理,但这应该非常简单。