Проблема, по-видимому, в том, что у вас есть файл, размер которого больше, чем может обработать R, и поэтому вы хотите прочитать только подмножество строк в R, и указание условия для его фильтрации включает обращение к первому столбцу, имя которого испорчено, чтобы вы могли не использую это.
Вот два альтернативных подхода. Первый включает немного больше кода, но имеет то преимущество, что он составляет 100% R. Второй - только один оператор и также использует R, но дополнительно использует внешнюю утилиту.
1) пропустить заголовок. Прочтите файл, пропуская заголовок. Это приведет к тому, что столбцы будут помечены V1
, V2
и т. Д. И будут использовать V1
в условии.
# write out a test file - BOD is a data frame that comes with R
write.csv(BOD, "BOD.csv", row.names = FALSE, quote = FALSE)
# read file skipping over header
DF <- read.csv.sql("BOD.csv", "select * from file where V1 < 3",
skip = 1, header = FALSE)
# read in header, assign it to DF and fix first column
hdr <- read.csv.sql("BOD.csv", "select * from file limit 0")
names(DF) <- names(hdr)
names(DF)[1] <- "TIME" # suppose we want TIME instead of Time
DF
## TIME demand
## 1 1 8.3
## 2 2 10.3
2) фильтр. Другой способ продолжить - использовать аргумент filter=
. Здесь мы предполагаем, что знаем, что конец имени столбца - ime
, но есть другие символы до этого, которые мы не знаем. Это предполагает, что sed
доступен и находится на вашем пути. Если вы работаете в Windows, установите Rtools, чтобы получить sed
. Цитирование может потребоваться изменить в зависимости от вашей оболочки.
Пробуя это в Windows, я заметил, что sed
из Rtools изменили окончания строк, поэтому ниже мы указали eol=
, чтобы обеспечить правильную обработку. Возможно, вам это не понадобится.
DF <- read.csv.sql("BOD.csv", "select * from file where TIME < 3",
filter = 'sed -e "1s/.*ime,/TIME,/"' , eol = "\n")
DF
## TIME demand
## 1 1 8.3
## 2 2 10.3
person
G. Grothendieck
schedule
12.03.2019
colnames(x) <- letters[seq_len(ncol(x))]
, чтобы получить строчные буквы для всех столбцов. Если у вас их больше 26, вам нужно будет разместить ... - person r2evans   schedule 13.03.2019