2016-02-15 2 views
0

Я пытаюсь прочитать csv в R. Я хотел бы удалить строки перед строкой, которая начинается с «#», а также сделать это строка моего заголовка. Поскольку строка, начинающаяся с «#», всегда меняется, я не хочу использовать skip =.Как создать определенную строку, начинающуюся с «#» заголовка в R

В настоящее время, когда я read.csv ("df.csv"):

abc  x  x.1  x.2 
def 
ghi 
#  vbn  crt  ykl 
4  rte  77  drf 

Что я хотел бы:

#  vbn  crt  ykl 
4  rte  77  drf 

Я пробовал:

df <- df[min(grep("vbn",df$x)) :nrow(vnb),] 

I знаете, что название второго столбца никогда не изменится и всегда будет «vbn». Я думал, что это сработает. Но это мой результат.

abc  x  x.1 x.2 
#  vbn  crt ykl 
4  rte  77 drf 

Я также попробовал:

library(data.table) 
fread("df.csv") 

Но это не сработало, и дали те же результаты, когда я только что сделал read.csv ("df.csv")

Любая помощь будут оценены. Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию. Спасибо.

ответ

2

Ниже приведено двухэтапное решение: сначала мы читаем файл с линиями чтения и находим строку, начинающуюся с #, а затем читаем ее снова, пропуская все предыдущие строки.

# x <- readLines("myfile.csv") 
x <- readLines(textConnection(text)) 

h <- grep("^#",x) # find the header row 

# df <- data.table::fread("myfile.csv",skip=h-1) 
df <- data.table::fread(text,skip=h-1) 

# or the base-R alternative (@A.Val's comment) 
# read.table(text = text, skip = h-1, comment.char="", header = T) 
# read.table("myfile.csv", skip = h-1, comment.char="", header = T) 
df 

# vbn crt ykl 
1: 4 rte 77 drf 

данные

text <- "abc  x  x.1  x.2 
def 
ghi 
#  vbn  crt  ykl 
4  rte  77  drf" 
+0

Можно также добавить базовый пример: 'read.table (текст = текст, пропустить = H-1, comment.char = "", заголовок = T)' –

Смежные вопросы