2017-11-03 1 views
0

ich ein paar hundert .csv die haben (here is a sample of 3 of these files) Ich möchte gerne:Entfernen Reihen aller Datenrahmen in globalen Umfeld

  1. Import in R
  2. zu einer gemeinsamen Zeilenlänge Trim
  3. Extract ein spezifische Spalte
  4. In einen Datenrahmen mit dem Objektnamen als Spaltennamen kombinieren.

In meinem Fall habe ich die Dateien in fein mit bekommen kann:

temp = list.files(pattern="*.csv") 
list2env(
lapply(setNames(temp, make.names(gsub("*.csv$", "", temp))), 
read.csv), envir = .GlobalEnv)} 

aber nach ein paar verschiedenen Vorschläge versuchen, den Datenrahmen zu 25.000 Beobachtungen je, ich kann nicht sehen, wie man Schleife und trimme und extrahiere für jeden die Spalte 'data.Activity'.

Idealerweise würde ich am Ende ein Objekt mit 25.000 Beobachtungen erhalten, und jede der 'data.Activity'-Variablen aus den gelieferten Datensätzen wird als' Clinstag_XX'-ID bezeichnet.

Jede Hilfe würde sehr geschätzt werden.

+0

Diese Frage ist zu vage zu beantworten. Aber hier ist ein Hinweis: Sie sollten sie in einer Liste behalten, anstatt 'list2env' zu verwenden. Auf diese Weise können Sie wieder 'lapply' auf allen Datenrahmen verwenden, um sie auf eine gemeinsame Zeilenlänge usw. zu trimmen. Siehe die Antwort von gregor [hier] (https://stackoverflow.com/questions/17499013/how-do -i-make-a-Liste von Datenrahmen) für motivierendere Beispiele. – lmo

+1

@Imo Danke, ich habe die list2env verschrottet und lapply benutzt, was super funktioniert hat. –

Antwort

0

Sie können immer mit Datentabellen arbeiten und jede Operation tun in einer for-Schleife.

So ähnlich.

temp = list.files(path = 'data', pattern = "*.csv") 


datatable <- read.csv(file = paste0("data/",temp[1])) %>% as.data.table() 
datatable <- datatable[1:2500, names(datatable)[names(datatable)%like%"Activity|Date"], with = F] 


for(file in temp[2:length(temp)]){ 
temp1 <- read.csv(file = paste0("data/",file)) %>% as.data.table() 
temp11 <- temp1[1:2500, names(temp1)[names(temp1)%like%"Activity|Date"], with = F] 
datatable <- rbind(datatable, temp11, fill = T) 
} 

Sie können die Zeilennummer der Variablen anpassen, die Sie extrahieren möchten. Hinweis: Ich habe die CSV-Dateien in einen Ordner namens Daten gelegt.

+1

Danke! Nach ein paar kleineren Optimierungen (wie zB cbind statt oder rbind) habe ich Ihren Vorschlag bearbeitet. Habe viel von deinem Beispiel gelernt. Danke nochmal für deine Mühe. –

0

Hier ist ein Beispiel:

foo <- data.frame(a = 1:3, data.Activity = runif(3)) 
bar <- data.frame(data.Activity = runif(5), b = letters[1:5]) 
rows <- 2:3 
do.call(cbind, lapply(ls(pattern="foo|bar"), function(dfname) { 
    setNames(get(dfname)[rows, "data.Activity", drop=F], dfname) 
})) 
# bar  foo 
# 2 0.4387158 0.08075924 
# 3 0.3078052 0.92174396 
Verwandte Themen