Seite 1 von 2

CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 7:50 am
von mokka
Liebe alle,

ich habe CSV files, deren header eine bestimmte variable enthalten, die aber nicht immer in der selben spalte stehen.
bis jetzt konnte ich schon mal alle CSV files aus dem ordner in R laden.
um zu sehen, ob das ganze richtig gemerged wird, habe ich 2 testfiles erstellt (Test1, Test2).

bis jetzt sieht mein code also folgendermaßen aus:

Code: Alles auswählen

folder <- "C:/Users/Desktop/CSV-TEST/" 
file_list <- list.files(path=folder, pattern="*.csv")
for (i in 1:length(file_list)){
  
  assign(file_list[i], 
         
         read.csv(paste(folder, file_list[i], sep=''),sep=";",dec=",",header=TRUE)
         
  )}

MERGE <- merge(Test1.csv[c"HF",],Test2.csv["HF",])
momentan hänge ich am merge-befehl...

ich hätte gerne ein output-file (zb Result-CSV), in dem dann nur noch die variable HF in einem CSV file abgelegt ist - in weiterer folge sollen es mehrere variablen sein, die ich suche, merge und neu ablege...

vielen dank vorab für eure hilfe! :)

lg mokka

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 8:17 am
von ad_berlin
Hi, ich hatte gerade wahrscheinlich ähnliches problem. Bin noch anfänger aber vlt passt mein code beispiel.

Code: Alles auswählen

test2 <- read.csv("test2.csv", header = TRUE)
test1 <- read.csv("test1.csv", header = TRUE)
merged_report <- merge(test1, test2, by.x="HF", by.y="HF")
by.x ist die spalte in test1
die mit
by.y aus test2 gemerged wird.

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 8:51 am
von mokka
hey!

ich bin auch ganz neu in R ^^

ich hab deinen code jetzt wie folgt eingebaut

Code: Alles auswählen

test1 <- read.csv("Test1.csv", header = TRUE)
test2 <- read.csv("Test2.csv", header = TRUE)

merged_report <- merge(test1, test2, by.x="HF", by.y="HF")
und bekomme dann leider folgende Fehlermeldungen:

Code: Alles auswählen

> test1 <- read.csv("Test1.csv", header = TRUE)
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'Test1.csv': No such file or directory
> test2 <- read.csv("Test2.csv", header = TRUE)
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'Test2.csv': No such file or directory
> 
> merged_report <- merge(test1, test2, by.x="HF", by.y="HF")
Error in merge(test1, test2, by.x = "HF", by.y = "HF") : 
  object 'test1' not found

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 8:53 am
von mokka
... was ich nicht verstehe. aber vermutlich kann er die CSV files nicht einfach aus dem environment so einlesen..?

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 10:09 am
von mokka

Code: Alles auswählen

merged_report <- merge(Test1.csv, Test2.csv, by.x="HF", by.y="HF")
erstellt mir das file, das ich brauche, allerdings werden nicht nur HF sondern ALLE spalten kombiniert, jedoch ohne den entsprechenden Zeileneinträgen der spalten...
den teil

Code: Alles auswählen

# test1 <- read.csv("Test1.csv", header = TRUE)
# test2 <- read.csv("Test2.csv", header = TRUE)
habe ich allerdings weggelassen, weil das nicht funktioniert hat.

Kann mir bei diesem problem jemandweiterhelfen? :)

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 11:24 am
von Athomas
Auch hier könnte man eine Menge sagen, aber leider sind keine Spieldaten dabei, deshalb von mir nur der kleine Hinweis, dass man beim Einlesen auch den Ordner - den man ja bereits beim Auflisten der Dateien angegeben hat - in irgendeiner Form kundtun sollte ...

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 4:40 pm
von jogo
Hallo mokka,

willkommen im Forum!
mokka hat geschrieben: Sa Aug 17, 2019 8:51 am

Code: Alles auswählen

test1 <- read.csv("Test1.csv", header = TRUE)
test2 <- read.csv("Test2.csv", header = TRUE)

merged_report <- merge(test1, test2, by.x="HF", by.y="HF")
und bekomme dann leider folgende Fehlermeldungen:

Code: Alles auswählen

> test1 <- read.csv("Test1.csv", header = TRUE)
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'Test1.csv': No such file or directory
> test2 <- read.csv("Test2.csv", header = TRUE)
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'Test2.csv': No such file or directory
Die Fehlermeldungen sind ziemlich eindeutig. Die Dateien werden nicht gefunden. Wahrscheinlich hast Du das Arbeitsverzeichnis nicht gesetzt.
Bitte kontrolliere es mit:

Code: Alles auswählen

getwd()
schau, ob die Dateien dort sind mit

Code: Alles auswählen

dir()
(die sind nicht dort - sonst gäbe es ja nicht die Fehlermeldungen)
Setze das Arbeitsverzeichnis (verschiedene Umgebungen (RGui, RStudio) bieten dazu verschiedene Möglichkeiten).
Da Du aber dazu nichts geschrieben hast, kann ich Dir nur die R-Variante anbieten:

Code: Alles auswählen

setwd("Pfad.zu.Deinen.Dateien")
Und vergiss nicht, nochmal zu kontrollieren mit dir() :!:

Gruß, Jörg

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 6:29 pm
von mokka
hallo jörg!

danke für deinen input :)

ich bin jetzt schon ein bisschen weiter gekommen - dank eurer hilfe und ein paar glücklichen zufällen.

ich arbeite mit RStudio (besser gesagt: ich versuche es :D)...

Code: Alles auswählen

library(dplyr)
library(purrr)

setwd("C:/Users/Desktop/CSV-TEST")

paths <- dir()
df_list <- map_df(.x = paths, 
               .f = ~ read.csv(.x, header = T, sep = ";"))

df_list2 <- select(df_list, HF, )

write.csv(df_list2, file = "soll_merged.csv",row.names=TRUE)
Ich habe die beispiel-files auch angehängt und hoffe, das das weiterhilft.

ich möchte den code so schreiben, dass das ganze dann so wie
soll_merge.csv
(92 Bytes) 166-mal heruntergeladen
aussieht.

allerdings steh ich dabei nun ziemlich an:
- ich bekomme unerklärlich viele nan's in meinen df
- ich habe noch keine lösung gefunden, die nan's, die ich zb bei HF absichtlich in das eine Testfile eingebaut habe, lediglich zu "überspringen", aber nicht gleich die ganze zeile oder spalte zu löschen (ich habs mit na.omit probiert, aber das klappt definitiv nicht...

VIELEN DANK, falls ihr mir hier weiterhelfen könnt und wollt :)

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 6:31 pm
von mokka
das 2. file klappt leider nur separat...

Re: CSV Spalten mergen

Verfasst: Sa Aug 17, 2019 10:39 pm
von EDi
so hier?

Code: Alles auswählen

# create temp directory
mydir <- tempdir()
# download files
download.file("http://forum.r-statistik.de/download/file.php?id=638", 
              destfile = file.path(mydir, "Test1.csv"))
download.file("http://forum.r-statistik.de/download/file.php?id=640", 
              destfile = file.path(mydir, "Test2.csv"))

# now we have a directory with 2 csvs
list.files(mydir)

# lets start data crunshing 
library(dplyr)
library(purrr)
library(tidyr)
# list all csvs
files <- list.files(mydir, pattern = '.csv', full.names = TRUE)
# run over all csv, read in and rbind them
df <- map_df(files, ~ read.csv(.x, header = T, sep = ";"))

df %>%
  # keep only needed columns
  select(HF, SDNN) %>%
  # drop rows with NA
  drop_na() %>%
  # write out
  write.csv(file = fil.path(mydir, "soll_merged.csv"), row.names=TRUE)