Mam plik danych tekstowych, który prawdopodobnie będę czytać z readLines
. Początkowa część każdego łańcucha zawiera dużo bełkotania, po którym znajdują się dane, których potrzebuję. Brzęczenie i dane są zwykle oddzielone trzema kropkami. Chciałbym podzielić struny po ostatnich trzech kropkach, lub zamienić ostatnie trzy kropki na marker oznaczający R, aby traktować wszystko po lewej stronie tych trzech kropek jako jedną kolumnę.R: usuwanie ostatnich trzech kropek z ciągu
Oto podobny post Stackoverflow że zlokalizuje ostatnią kropkę:
R: Find the last dot in a string
Jednak w moim przypadku niektóre dane mają dziesiętne, więc lokalizowanie ostatnią kropkę nie wystarczy. Ponadto, myślę, że ...
ma specjalne znaczenie w R, co może komplikować problem. Kolejną potencjalną komplikacją jest to, że niektóre kropki są większe niż inne. W niektórych liniach jedna z trzech kropek została zastąpiona przecinkiem.
Poza postacią gregexpr
w powyższym wpisie próbowałem użyć gsub
, ale nie mogę znaleźć rozwiązania.
Oto dawać przykład dane, a wynik mam nadzieję osiągnąć:
aa = matrix(c(
'first string of junk... 0.2 0 1',
'next string ........2 0 2',
'%%%... ! 1959 ... 0 3 3',
'year .. 2 .,. 7 6 5',
'this_string is . not fine .•. 4 2 3'),
nrow=5, byrow=TRUE,
dimnames = list(NULL, c("C1")))
aa <- as.data.frame(aa, stringsAsFactors=F)
aa
# desired result
# C1 C2 C3 C4
# 1 first string of junk 0.2 0 1
# 2 next string ..... 2 0 2
# 3 %%%... ! 1959 0 3 3
# 4 year .. 2 7 6 5
# 5 this_string is . not fine 4 2 3
Mam nadzieję, że kwestia ta nie jest uważana za zbyt szczegółowe. Plik danych tekstowych został utworzony za pomocą kroków opisanych w moim poście z wczoraj na temat odczytu pliku MSWord w R.
Niektóre linie nie zawierają bełkotu lub trzech kropek, ale tylko dane. Może to jednak być komplikacją dla postu uzupełniającego.
Dziękuję za radę.
Czy możesz wyszukać i zamienić najpierw przecinki i duże kropki na zwykłe kropki? –
Myślę, że nie mogę zastąpić przecinków kropkami, ponieważ dane zawierają przecinki w większej liczbie: 4500. Zapomniałem o tym wspomnieć w moim poście. Chociaż może mógłbym zastąpić przecinki kropkami, a następnie usunąć kropki z danych po tym, jak wyeliminowałem bełkot. –