CSV Spalten mergen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

CSV Spalten mergen

Beitrag 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
ad_berlin
Beiträge: 9
Registriert: Do Aug 15, 2019 2:44 pm

Re: CSV Spalten mergen

Beitrag 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.
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: CSV Spalten mergen

Beitrag 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
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: CSV Spalten mergen

Beitrag von mokka »

... was ich nicht verstehe. aber vermutlich kann er die CSV files nicht einfach aus dem environment so einlesen..?
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: CSV Spalten mergen

Beitrag 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? :)
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: CSV Spalten mergen

Beitrag 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 ...
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: CSV Spalten mergen

Beitrag 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
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: CSV Spalten mergen

Beitrag 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) 17-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 :)
Dateianhänge
Test1.csv
(58 Bytes) 18-mal heruntergeladen
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: CSV Spalten mergen

Beitrag von mokka »

das 2. file klappt leider nur separat...
Dateianhänge
Test2.csv
(69 Bytes) 16-mal heruntergeladen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: CSV Spalten mergen

Beitrag 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)
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten