Mi última columna ("detalles") tiene información que tiene espacios o pestañas. ¿Cómo puedo leer todos los detalles como una sola columna en R?

Entrada

date    month   year    type    expenditure details
10/31/2017  Oct 2017    food    10.89   Point Of Sale Withdrawal 17203473997 TRESIDDER U2           STANFORD     CAUS
10/31/2017  Oct 2017    uber    4.80    Point Of Sale Withdrawal 44519795098 UBER   TRIP F73MU      HELP.UBER.COMCAUS
10/31/2017  Oct 2017    instacart   99.00   Point Of Sale Withdrawal 44534891998 INSTACART SUBSCRIPTION HTTPSINSTACARCAUS
10/31/2017  Oct 2017    food    8.45    Point Of Sale Withdrawal 22607113998 CLARK CENTER-BIO-X CAF STANFORD     CAUS
10/31/2017  Oct 2017    food    4.00    Point Of Sale Withdrawal 33426639883 COUPA CAFE Y2E2        STANFORD     CAUS
10/31/2017  Oct 2017    uber    4.52    Point Of Sale Withdrawal 42029000200217 UBER TRIP QZ7W5 HELP.UB800-5928996  CAUS
10/30/2017  Oct 2017    food    5.85    Point Of Sale Withdrawal 44519950998 UBER   TRIP HOOMP      HELP.UBER.COMCAUS
10/30/2017  Oct 2017    uber    23.20   Point Of Sale Withdrawal 33428390882 COUPA CAFE LYTTON      PALO ALTO    CAUS
10/30/2017  Oct 2017    food    7.52    Point Of Sale Withdrawal 34530890882 PANDA EXPRESS #2035    STANFORD     CAUS
r
0
ferrelwill 13 nov. 2017 a las 07:18

2 respuestas

La mejor respuesta

Si es un archivo de Excel, puede usar uno de los paquetes de R para leer el archivo en Excel. Usé sus datos de ejemplo y los abrí con openxlsx, que no necesita java, y leyó la columna de detalles como lo desea. El código sería:

read.xlsx("file", detectDates = T)
1
Alejandro Andrade 13 nov. 2017 a las 04:40

No soy un experto en esto, pero encontré una forma que funciona. Utiliza readLines para leer cada línea de su archivo como una sola cadena y luego dividir las primeras cinco palabras (columnas date, month, year, {{X4 }} y expenditure) y usa el resto de la línea como columna final details:

raw_txt <- readLines("123.txt")

splitted <- lapply(strsplit(raw_txt[-1], " +"), function(x){
   one_to_five <- x[1:5]
   six         <- paste0(x[5:length(x)], collapse=" ")
   c(one_to_five, six)
})

# Bind together the elements in "splitted":
df <- do.call(rbind, splitted)

# Give the columns the right names:
colnames(df) <- strsplit(raw_txt[1], " +")[[1]]

Resultado:

      date         month year   type        expenditure details                                                                               
 [1,] "10/31/2017" "Oct" "2017" "food"      "10.89"     "10.89 Point Of Sale Withdrawal 17203473997 TRESIDDER U2 STANFORD CAUS"               
 [2,] "10/31/2017" "Oct" "2017" "uber"      "4.80"      "4.80 Point Of Sale Withdrawal 44519795098 UBER TRIP F73MU HELP.UBER.COMCAUS"         
 [3,] "10/31/2017" "Oct" "2017" "instacart" "99.00"     "99.00 Point Of Sale Withdrawal 44534891998 INSTACART SUBSCRIPTION HTTPSINSTACARCAUS" 
 [4,] "10/31/2017" "Oct" "2017" "food"      "8.45"      "8.45 Point Of Sale Withdrawal 22607113998 CLARK CENTER-BIO-X CAF STANFORD CAUS"      
 [5,] "10/31/2017" "Oct" "2017" "food"      "4.00"      "4.00 Point Of Sale Withdrawal 33426639883 COUPA CAFE Y2E2 STANFORD CAUS"             
 [6,] "10/31/2017" "Oct" "2017" "uber"      "4.52"      "4.52 Point Of Sale Withdrawal 42029000200217 UBER TRIP QZ7W5 HELP.UB800-5928996 CAUS"
 [7,] "10/30/2017" "Oct" "2017" "food"      "5.85"      "5.85 Point Of Sale Withdrawal 44519950998 UBER TRIP HOOMP HELP.UBER.COMCAUS"         
 [8,] "10/30/2017" "Oct" "2017" "uber"      "23.20"     "23.20 Point Of Sale Withdrawal 33428390882 COUPA CAFE LYTTON PALO ALTO CAUS"         
 [9,] "10/30/2017" "Oct" "2017" "food"      "7.52"      "7.52 Point Of Sale Withdrawal 34530890882 PANDA EXPRESS #2035 STANFORD CAUS" 
1
KenHBS 13 nov. 2017 a las 08:26