Регулярное выражение будет работать.
Например, предположим, что str
- это строки, которые вы хотите распознать. Здесь предположим, что ваш файл CSV выглядит
1,1000,I, am done, with you
2,500, i don't know
Если вы хотите прочитать из файла, просто вызовите readLines()
, чтобы прочитать все строки файла в качестве вектора символов в R, так же, как str
.
Техника очень проста. Здесь я использую пакет {stringr}
в соответствии с текстом и извлекаю необходимую информацию.
str <- c("1,1000,I, am done, with you", "2,500, i don't know")
library(stringr)
# match the strings by pattern integer,integer,anything
matches <- str_match(str,pattern="(\\d+),(\\d+),\\s*(.+)")
Здесь я кратко объясняет картину (\\d+),(\\d+),\\s*(.+)
. \\d
представляет символ цифры, \\s
представляет символ пробела, .
представляет что угодно. +
означает один или несколько, *
означает отсутствие или некоторые. ()
группирует шаблоны так, что функция знает, что мы рассматриваем как группу информации.
Если посмотреть на matches
, это выглядит как
[,1] [,2] [,3] [,4]
[1,] "1,1000,I, am done, with you" "1" "1000" "I, am done, with you"
[2,] "2,500, i don't know" "2" "500" "i don't know"
Look, str_match
функция успешно разделить тексты по узору на матрице. Тогда наша работа состоит только в том, чтобы преобразовать матрицу в кадр данных с правильными типами данных.
df <- data.frame(matches[,-1],stringsAsFactors=F)
colnames(df) <- c("Id","Count","Comment")
df <- transform(df,Id=as.integer(Id),Count=as.integer(Count))
df
наша цель:
Id Count Comment
1 1 1000 I, am done, with you
2 2 1002 i don't know
я уже достиг этого, читая файл и сливая для тех строк, которые имеют более 3-х элементов в них. Мне интересно, есть ли более элегантное решение для этого. – Avinash
Если он прилагается, вы можете читать «1», «1000», «Я, я закончил, с вами». – Aashu
@Aashu Это не так. – Avinash