2016-05-01 13 views
-1

Ich bin neu in R. Ich habe ein Verzeichnis enthalten viele Dataframe-Dateien, die die gleiche Struktur (3 Spalten durch ",") wie folgt haben: Datum und timestamp, V2, V3Berechnen Sie zusammenfassende Statistiken von verschiedenen Spalten aus separaten data.frames

Ich soll Mittelwert, Median, SD, Varianz und Schiefe für beide Spalten V2 und V3 für alle Dateien berechnen und dann diese 10 Spalten in einer separaten Datei speichern. Jede Spalte (z. B. V2-Median) enthält Medianwerte aller V2-Spalten in allen Dateien. Ich brauche deine Hilfe dafür.

Dank

+0

Was alle haben Sie versucht, so weit? Sie können '.SD' in data.table verwenden, um die Aggregationsfunktion aller Spalten in einem Dataset zu berechnen –

Antwort

0

Eine weitere Methode:

#This library is needed to compute skewness 
library(e1071) 

#Set the directory where your files are present as home directory 
setwd("Directory where your files are present") 

#file names will be stored 
files <- list.files(path = ".",pattern = ".CSV$", ignore.case = TRUE) 
file<-NULL 
for (i in 1:length(files)){ 
current_file=read.table(files[i],header = TRUE,sep = ",") 
v2_mean=sapply(current_file[2], mean, na.rm = TRUE) 
v2_median=sapply(current_file[2], median, na.rm = TRUE) 
v2_SD=sapply(current_file[2], sd, na.rm = TRUE) 
v2_variance=sapply(current_file[2], var, na.rm = TRUE) 
v2_Skew=sapply(current_file[2], skewness, na.rm = TRUE) 

v3_mean=sapply(current_file[3], mean, na.rm = TRUE) 
v3_median=sapply(current_file[3], median, na.rm = TRUE) 
v3_SD=sapply(current_file[3], sd, na.rm = TRUE) 
v3_variance=sapply(current_file[3], var, na.rm = TRUE) 
v3_Skew=sapply(current_file[3], skewness, na.rm = TRUE) 
file<-rbind.data.frame(file,c(v2_mean,v2_median,v2_SD,v2_variance,v2_Skew,v3_mean,v3_median,v3_SD,v3_variance,v3_Skew)) 
} 
names(file)<-c("v2_mean","v2_median","v2_SD","v2_variance","v2_Skew","v3_mean","v3_median","v3_SD","v3_variance","v3_Skew") 

#Final file will be saved in the home directory 
write.csv(file, "file_stats.csv") 
+1

Danke. Es ist sehr hilfreich. –

1

Wenn ich Sie Fragen richtig zu verstehen, ist hier eine schnelle Lösung data.table verwenden.

# Load library 
    library(data.table) 
    library(moments) 
    library(readr) 



# Get a List of `.csv` files in your folder 
    filenames <- list.files("C:/your/folder", pattern="*.csv", full.names=TRUE) 


# Load and bind all data sets into one single data frame 
    df <- rbindlist(lapply(filenames,fread)) 


# run the summary statistics for V2 and V3 

output <- df[,.( V2_mean= mean(V2) 
       , V2_median= median(V2) 
       , V2_SD= sd(V2) 
       , V2_var= var(V2) 
       , V2_skw= skewness(V2) 
       , V3_mean= mean(V3) 
       , V3_median= median(V3) 
       , V3_SD= sd(V3) 
       , V3_var= var(V3) 
       , V3_skw= skewness(V3)) ] 


# save output in a different file 
    write_csv(output, "output.csv") 
+2

' data.table' hat kürzlich 'fwrite' implementiert (und läuft parallel). Überprüfen Sie [diesen Beitrag] (http://stackoverflow.com/questions/10505605/speeding-up-the-performance-of-write-table/36465497#36465497) für einen Benchmark (~ 17x schneller als 'write.csv') und [dieses Blog] (http://blog.h2o.ai/2016/04/fast-csv-writing-for-r/) für eine nette Erklärung. Und 'write_csv' scheint langsamer als' write.csv' zu sein. – Arun

+1

Hallo @Arun, ich habe 'fwrite {data.table}} 'verwendet, aber nicht in meiner Antwort verwendet, weil ich glaube, dass es sich immer noch in der Entwicklungsversion von' data.table' befindet. Abgesehen davon ist 'fwrite' das Sahnehäubchen und macht data.table zum schnellsten Paket für die Datenmanipulation. –

+1

Rafael, danke. Der Kommentar war hauptsächlich um andere Benutzer zu informieren, die diesen Beitrag über 'fwrite' gelesen haben. – Arun

Verwandte Themen