Tengo un archivo de datos de texto que probablemente leeré con readLines
. La porción inicial de cada cadena contiene muchos galimatías seguidos de los datos que necesito. El galimatías y los datos generalmente están separados por tres puntos. Me gustaría dividir las cuerdas después de los últimos tres puntos, o reemplazar los últimos tres puntos con un marcador de algún tipo que le indique a R que trate todo a la izquierda de esos tres puntos como una columna.R: eliminación de los últimos tres puntos de una cadena
Aquí está un puesto similar en Stackoverflow que se localice el último punto:
R: Find the last dot in a string
Sin embargo, en mi caso algunos de los datos tienen decimales, por lo que la localización del último punto no será suficiente. Además, creo que ...
tiene un significado especial en R, lo que podría estar complicando el problema. Otra posible complicación es que algunos de los puntos son más grandes que otros. Además, en algunas líneas, uno de los tres puntos fue reemplazado por una coma.
Además de gregexpr
en la publicación anterior, he intentado utilizar gsub
, pero no puedo encontrar la solución.
Aquí es establecer un conjunto de datos de ejemplo y el resultado que esperan lograr:
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
espero que esta cuestión no se considera demasiado específica. El archivo de datos de texto se creó utilizando los pasos descritos en mi publicación de ayer sobre la lectura de un archivo MSWord en R.
Algunas líneas no contienen galimatías o tres puntos, sino solo datos. Sin embargo, eso podría ser una complicación para una publicación de seguimiento.
Gracias por cualquier consejo.
¿Puedes hacer primero una búsqueda y reemplazar todas las comas y los puntos grandes en puntos regulares? –
No creo que pueda reemplazar las comas con puntos porque los datos contienen comas en los números más grandes: 4,500. Olvidé mencionar eso en mi publicación. Aunque tal vez podría reemplazar las comas con puntos y luego eliminar los puntos de los datos después de eliminar el galimatías. –