2017-08-31 2 views
1

Ich habe ein paar tausend *.csv Dateien (alle mit einem eindeutigen Namen) aber die Header - Spalten sind in den Dateien gleich - wie "Timestamp" , "System_Name", "CPU_ID", etc ...
Meine Frage ist, wie kann ich ersetzen entweder "System_Name" (was ist ein Systemname wie "as12535.org.at" oder eine andere Kombination von Zeichen, und anonymize? Ich bin dankbar für jeden Hinweis oder Punkt in der rechten Richtung ...
Unterhalb der Struktur einer CSV-Datei ...R - loop durch data.frames in einer Liste - Zeichen der Spalte ändern (Listenelement)

"Timestamp","System_Name","CPU_ID","User_CPU","User_Nice_CPU","System_CPU","Idle_CPU","Busy_CPU","Wait_IO_CPU","User_Sys_Pct" 
"1161025010002000","as06240.org.xyz:LZ","-1","1.83","0.00","0.56","97.28","2.72","0.33","3.26" 
"1161025010002000","as06240.org.xyz:LZ","-1","1.83","0.00","0.56","97.28","2.72","0.33","3.26" 
"1161025010002000","as06240.org.xyz:LZ","-1","1.83","0.00","0.56","97.28","2.72","0.33","3.26" 

Ich versuchte es mit dem R - Paket anonymizer, die gut auf der Vektorebene funktioniert, aber ich lief in Probleme tun dies für Tausende von csv - Dateien, die ich in R - was ich versuchte, war das folgende - Erstellen einer Liste mit allen CSV-Dateien als Datenrahmen in der Liste.

initialize a list 
r.path <- setwd("mypath") 
ldf <- list() 

# creates the list of all the csv files in my directory - but filter for 
# files with Unix in the filename for testing. 
listcsv <- dir(pattern = ".UnixM.") 

for (i in 1:length(listcsv)){ 
ldf[[i]] <- read.csv(file = listcsv[i]) 
} 

ich mein Gehirn zum Tode verdrehen, wie ich die System_Name Spalte nicht anonymisieren könnte, oder sogar einige Zeichen ersetzen (für Pseudo-Anonymisierung) und Schleife durch die Liste (ldf) und den Datenrahmen Elemente, dass sehr Liste.

Meine Liste ldf (die df für die einzelnen CSV-Dateien enthält) sieht wie folgt aus:

summary(ldf) 
Length Class  Mode 
[1,] 5  data.frame list 
[2,] 5  data.frame list 
[3,] 5  data.frame list 

showing the structure of my list, containing all files contents as dataframe

Wie kann ich jetzt in allen CSV-Dateien lesen, verändern oder die gesamte anonymisieren oder sogar Teile der "System_Name" Spalten, und tun dies für jede einzelne CSV in meinem Verzeichnis, in einer Schleife in R? Braucht nicht super elegant zu sein - bin glücklich, wenn es die Arbeit erledigt :-)

+0

Verwenden Sie 'lapply' zu Ihrer Liste mit der gewünschten Funktion. Ich weiß nicht, wie Anonymizer funktioniert, in einem hypothetischen Fall ist die Funktion wie "Anonymizer (Spalte)": 'lapply (Liste, Funktion (x) Anonymizer (x $ System_Name))' –

Antwort

2

Ein gemeinsames Muster, dies zu tun wäre:

df <- do.call(
    rbind, 
    lapply(dir(pattern = "UnixM"), 
     read.csv, stringsAsFactors = FALSE) 
) 
df$System_Name <- anonymizer::anonymize(df$System_Name) 

Es unterscheidet sich von dem, was Sie versuchen, dass es bindet alle Datenframes in einem und anonymisiert dann.

Natürlich können Sie alles in einer Liste behalten, wie @S Rivero suggeriert. Es würde aussehen wie:

listdf <- lapply(
    dir(pattern = "UnixM"), 
    function(filename) { 
    df <- read.csv(filename, stringsAsFactors = FALSE) 
    df$System_Name <- anonymizer::anonymize(df$System_Name) 
    df 
    } 
) 
Verwandte Themen