Как пропустить строку комментариев в файле данных, который я хочу импортировать, с помощью R

У меня много строковых файлов (.str), и я хочу импортировать их в R (зацикливая файлы). Проблема в том, что первая строка не является ни именем столбца, ни началом матрицы. Это строка комментария. То же самое для последней строки. между этими двумя линиями встаньте матрицу, которую я хочу импортировать. Как я могу это сделать?

Спасибо


person Community    schedule 05.07.2013    source источник
comment
Добро пожаловать в СО. Прочтите это о том, как создать воспроизводимый пример. В этом случае например, вы должны добавить некоторые части вашего текста, то что вы пробовали.   -  person agstudy    schedule 05.07.2013
comment
Им предшествует какой-либо символ комментария?   -  person James    schedule 05.07.2013
comment
Читать ?read.table. Вам могут быть важны параметры skip, nrow и comment.char.   -  person Roland    schedule 05.07.2013
comment
Если не все файлы имеют одинаковую структуру, вы всегда можете прочитать их с помощью readLines, а затем использовать функции регулярных выражений для удаления ненужных строк перед преобразованием в предполагаемую структуру данных.   -  person Thomas    schedule 05.07.2013
comment
Спасибо, ребята.. Роланд, я не могу использовать nrow.. количество строк зависит от файлов, оно является переменным.   -  person    schedule 05.07.2013
comment
@user2551551 user2551551 Но если вы хотите пропустить первую строку, просто используйте skip = 1 в read.table для перехода на первую строку и продолжайте как обычно, например read.table( "myfile.txt" , skip = 1 , header = TRUE )   -  person Simon O'Hanlon    schedule 05.07.2013


Ответы (3)


Если вы хотите пропустить первую и последнюю строку в файле, вы можете сделать это следующим образом. Используйте readLines, чтобы прочитать файл в вектор символов, а затем передайте его read.csv.

strs <- readLines("filename.csv")
dat <- read.csv(text=strs,             # read from an R object rather than a file
                skip=1,                # skip the first line
                nrows=length(strs) - 3 # skip the last line
                )

- 3 связано с тем, что количество строк данных на 3 меньше, чем количество строк текста в файле: 1 пропущенная строка в начале, 1 строка заголовков столбцов и 1 пропущенная строка в конце. Конечно, вы также можете просто проигнорировать аргумент nrows и удалить бессмысленную строку из вашего фрейма данных после импорта.

person Hong Ooi    schedule 05.07.2013

Вы можете размещать свои комментарии в любом месте файлов данных так же, как вы размещаете свои комментарии в сценарии R. Например, если у меня есть data.txt вот так:

# comment 1
str1
str2
# comment 2
str3
# comment 3
str4
str5# comment 4
str6
str7
# comment 5

Тогда вам не нужно ничего делать, чтобы пропустить комментарии:

> x<-read.table("data.txt", header=FALSE)
> x
    V1
1 str1
2 str2
3 str3
4 str4
5 str5
6 str6
7 str7
>

Обратите внимание, что comment 4 не читается. Вы можете изменить символ комментария #, используя опцию comment.char.

person k.c.    schedule 28.07.2015

Вы можете пропускать произвольные строки в любом месте файла, если сочетаете подход readLines, который дает Хонг Оой, с отрицательным индексированием. Вот пример, который пропускает строки 2-5 в файле, который имеет заголовки, но количество строк аннотации/метаинформации:

lines <- readLines('myfile.txt')
mytable <- read.table(text = lines[-c(2:5)], sep = '\t', header = T)
person posdef    schedule 16.06.2017
comment
Это не пропускает строки. Он читает все строки, а затем удаляет некоторые из них. Если файлы большие, это плохой подход. - person CoderGuy123; 28.08.2020