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:
schau, ob die Dateien dort sind mit
(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:
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

)...
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
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)