2016-09-05 3 views
0

Ich habe meine CSV-Datei in R als Datenrahmen importiert und ich habe meine Spalte von Interesse (AtollInservice$Antenna) als Faktor zugeordnet.Teilen von Zeichenfolgen in einem Datenrahmen in R

Die ursprüngliche CSV-Datei hat folgendes Format in meiner Kolumne von Interesse:

COM_CVV65BSX-M\COM_CVV65BSX-M_2100_T02 

Wie Sie werden feststellen, es gibt einen einzigen „\“ in meiner ursprünglichen Datei noch auf read.csv importieren und mit dem Kopf() Funktion R scheint solche die Backslash dupliziert zu haben, wie unten:

> head(AtollInService$ANTENNA) 
[1] COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
[4] COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 

Es gibt Überschneidungen zu Beginn der Zeichenfolge in der Datei und ich wünsche, dass alles über die \ behalten oder \, so dass COM die Hersteller, CVV65BSX-M ist Modell, 2100 ist das Band und T02 ist die Neigung.

Ich habe versucht, Hadley Wickhams Colsplit-Funktion innerhalb einer Transformationsfunktion zu integrieren, aber ich wurde für zusätzliche Informationen aufgefordert, die ich nicht knacken konnte.

Wenn jemand einen Vorschlag hat, wie ich diese bestimmte Spalte in meinem ursprünglichen Datenrahmen aufteilen könnte, würde ich mich freuen, von Ihnen zu hören. Beigefügt ist eine Verknüpfung zu einer Stichprobe der Daten, die ich verwende und teilen möchte, insbesondere die Spalte "P" ist von Interesse.

Dies ist der Datenrahmen ich jetzt arbeite:

AtollInService <- with(Atoll, Atoll[!grepl("[_()]", NOMINAL_ID) & grepl("InService", MILESTONE) & grepl("^[A-Z][A-Z][0-9]{4}$", NOMINAL_ID) & !grepl("[L18]+[L08]", THREE_G_CELL_ID), ]) 

Könnte ich einen String Split-Funktion unmittelbar nach dem Ende eckigen Klammer übernehmen und die Endhalterung geschlossen?

Sample Data

+1

Sie haben keine doppelten Schrägstriche \ in Ihren importierten Daten. R gibt einen einzelnen Schrägstrich als \\ aus, da ein Schrägstrich für Sonderzeichen wie einen Zeilenumbruch '\ n' oder einen Tab' \ t' verwendet werden kann – thelatemail

Antwort

1

Angenommen, dieser Rahmen Ihrer ursprünglichen Daten (vereinfacht zwei Spalten zu erläutern):

AtollInservice 
#         ANTENNA MILESTONE 
# 1 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService 
# 2 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService 
# 3 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService 
# 4 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService 
# 5 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService 
# 6 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 NoService 

Hier ist eine Option mit data.table Paket, in dem Sie filtern können und neue Spalten ganz einfach erstellen, Das geht davon aus, dass die ANTENNA Spalte immer das gleiche Format haben und Sie können tstrsplit mit regulärem Ausdruck _|\\\\ verwenden, die entweder auf _ oder \\ aufgeteilt werden und dann die letzten vier Elemente als Colu nehmen mns:

library(data.table) 
(setDT(AtollInservice)[grepl("InService", MILESTONE)] 
        [, c("manufacturer", "model", "band", "tilt") := 
         tstrsplit(ANTENNA, "_|\\\\")[3:6]][]) 

#         ANTENNA MILESTONE manufacturer  model band tilt 
#1: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService   COM CVV65BSX-M 2100 T02 
#2: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService   COM CVV65BSX-M 2100 T02 
#3: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService   COM CVV65BSX-M 2100 T02 
#4: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService   COM CVV65BSX-M 2100 T02 
#5: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService   COM CVV65BSX-M 2100 T02 
Verwandte Themen