Я хочу импортировать содержание файла CSV в R, файл CSV содержит несколько разделов данных вертикально, разделенный пустыми строками и звездочками. Например,
********************************************************
* SAMPLE DATA ******************************************
********************************************************
Name, DOB, Sex
Rod, 1/1/1970, M
Jane, 5/7/1980, F
Freddy, 9.12,1965, M
*******************************************************
* Income Data ****************************************
*******************************************************
Name, Income
Rod, 10000
Jane, 15000
Freddy, 7500
Я хотел бы импортировать это в R как два отдельных кадра данных. В настоящее время я вручную сокращаю файл CSV в меньшие файлы, но я думаю, что мог сделать это с помощью read.csv и пропуск и nrows настройки read.csv, Если я мог бы разработать, где повреждения secion.
Это дает мне логического TRUE для каждой пустой строки
ifelse(readLines("DATA.csv")=="",TRUE,FALSE)
Я надеюсь, что кто-то уже решил эту проблему.
В этом случае я сделаю что-то вроде:
# Import raw data:
data_raw <- readLines("test.txt")
# find separation line:
id_sep <- which(data_raw=="")
# create ranges of both data sets:
data_1_range <- 4:(id_sep-1)
data_2_range <- (id_sep+4):length(data_raw)
# using ranges and row data import it:
data_1 <- read.csv(textConnection(data_raw[data_1_range]))
data_2 <- read.csv(textConnection(data_raw[data_2_range]))
На самом деле ваш первый набор примеров имеет противоречивую структуру, поэтому data_1
выглядит странно.
Возможно, вам пригодится этот непроверенный фрагмент:
reader <- file("DATA.CSV", "r")
lines <- readLines(reader)
writer1 <- textConnection("csv1", open = "w", local = TRUE)
writer2 <- textConnection("csv2", open = "w", local = TRUE)
currWriter <- writer1
lastLine <- length(lines)
lineNumber <- 4
repeat {
if (lineNumber>lastLine) break
if (lines[lineNumber]=="********************************************************") {
lineNumber <- lineNumber + 2 # eat two lines
currWriter <- writer2
} else {
writeLines(line, currWriter)
}
lineNumber <- lineNumber + 1
}
close(reader)
close(writer1)
close(writer2)
csv1Reader <- textConnection(csv1, "r")
csv2Reader <- textConnection(csv2, "r")
df1 <- read.csv(csv1Reader)
df2 <- read.csv(csv2Reader)
close(csv1Reader)
close(csv2Reader)