Duplikate in Excel löschen

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

Moderatoren: EDi, jogo

Antworten
seraphin12345

Duplikate in Excel löschen

Beitrag von seraphin12345 »

Hallo,

ich würde gerne wissen, wie man in einer eingelesenen Excelfile ein bestimmtes Zeichen (z.B. "!") sowie alle Duplikate löscht.
Folgender Code bisher:

Code: Alles auswählen

install.packages("readxl")
library("readxl")

rm(list = ls())
require("readxl")

x<-read_excel("C:\\Users\\...\\Base1.xlsx") 
a <- dim(x)
b <- a[1]  # Anzahl Zeilen
c <- a[2]  # Anzahl Spalten

for (i in 1:c) {
x[, i] <- gsub("!", "", x[,i])
  unique(x[,i])
  }
Die For-Schleife liefert leider nichts... Sie gibt mir nur die Werte wieder raus :(
Die apply - Funktion habe ich bisher noch nicht so verstanden, um sie anzuwenden...

Mit

Code: Alles auswählen

x <- x[!duplicated(x),]
x
hab ich es leider auch nicht geschafft, gibt mir nur die Excel wieder aus...

Kann mir jmd. helfen?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Duplikate in Excel löschen

Beitrag von jogo »

Hallo Seraphin,

bei mir geht Folgendes:

Code: Alles auswählen

C2 <- CO2
C2[] <- lapply(C2, gsub, pattern="M", replacement="#")
Probier doch mal:

Code: Alles auswählen

x[] <- lapply(x, gsub, pattern="!", replacement="", fixed=TRUE)
Bei den Duplikaten: meinst Du doppekte Zeilen oder meinst Du doppelte Zellen?
Wenn es um das Eleminieren doppelter Zeilen geht, kannst Du unique() auch auf einen Dataframe anwenden (siehe Dokumentation):

Code: Alles auswählen

x <- rbind(BOD, BOD)
unique(x)
Gruß, Jörg
seraphin12345

Re: Duplikate in Ecxel löschen

Beitrag von seraphin12345 »

danke schön, funktioniert!!
Noch eine Frage: Bei einem anderen Thema (viewtopic.php?f=7&t=1023) wurde schon gefragt, wie man Daten aggregieren kann. Für data.frame kann ich die aggregate-Funktion verwenden, wie sieht es bei Excel aus?

Wenn ich also 6 Spalten habe mit zig Zeilen habe, bei dem es verschiedene Werte (a,b,c,d...)gibt, die doppelt vorkommen ("a" kommt z.B. 10 mal vor) und ich möchte wissen, wie viele eindeutige Werte es gibt (also z.B. a,b,c,d,e,f,g) welche Funktion kann ich denn da anwenden?
Mit unique/duplicate komme ich da nicht weiter...

viele grüße
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Duplikate in Ecxel löschen

Beitrag von bigben »

Wenn man Deinen gsub-Aufruf nicht auf ganze Spalten, sondern auf jede "Zelle" einzeln anwendet, dann funktinoiert er und löscht überall die Ausrufezeichen. Anfängerfreundlich als for-Schleife ausgedrückt, funktioniert das hier:

Code: Alles auswählen

x = data.frame(a=c("!","","A","B"), 
               b=c("A", "!A!A!A", "!!!", "B!"),
               stringsAsFactors = FALSE)
print(x)

for(zeile in 1:nrow(x))
  for(spalte in 1:ncol(x))
    x[zeile, spalte] =  gsub("!", "", x[zeile, spalte])
  
print(x)
Der unique-Aufruf in Deiner Schleife bewirkt gar nichst: Da wird mit unique ein Rückgabewert bestimmt und es ist nichts da, was sich des Rücknahmewerts annehmen, was ihn verwenden würde.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Duplikate in Ecxel löschen

Beitrag von jogo »

seraphin12345 hat geschrieben: Di Aug 14, 2018 3:08 pm danke schön, funktioniert!!
Noch eine Frage: Bei einem anderen Thema (viewtopic.php?f=7&t=1023) wurde schon gefragt, wie man Daten aggregieren kann. Für data.frame kann ich die aggregate-Funktion verwenden, wie sieht es bei Excel aus?
Durch das Einlesen

Code: Alles auswählen

x <- read_excel(...)
entsteht ein Dataframe x - das Objekt x in R ist keine Excel-Datei.
Deshalb verstehe ich nicht, was Du meinst.
Wenn ich also 6 Spalten habe mit zig Zeilen habe, bei dem es verschiedene Werte (a,b,c,d...)gibt, die doppelt vorkommen ("a" kommt z.B. 10 mal vor) und ich möchte wissen, wie viele eindeutige Werte es gibt (also z.B. a,b,c,d,e,f,g) welche Funktion kann ich denn da anwenden?
Mit unique/duplicate komme ich da nicht weiter...

Code: Alles auswählen

lengths(lapply(x, unique))
so :?:

Code: Alles auswählen

lengths(lapply(CO2, unique))
Gruß, Jörg
seraphin12345

Re: Duplikate in Excel löschen

Beitrag von seraphin12345 »

ich bin nicht so gut in R :)
danke, aber ich meine nicht die Anzahl der Werte, die es gibt, sondern die Ausprägung, d.h. mich interessieren, welche Elemente es gibt. In der folgenden Tabelle gibt es mehrere Werte in allen Spalten doppelt, z.B. "a". Ich möchte jetzt wissen, welche Werte es gibt, d.h. das Ergebnis sollte sein:
[1] a,f,b,y,r,d

Spalte 1 | Spalte 2 | Spalte 3 ...
a | f | a
b | y | r
d | s | r
...
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Duplikate in Excel löschen

Beitrag von jogo »

Code: Alles auswählen

x <- data.frame(Spalte1=c("a", "b", "d"), Spalte2=c("f", "y", "s"), Spalte3=c("a", "r", "r"))
unique(c(sapply(x, as.character)))
table(c(sapply(x, as.character))) # mit Anzahl
oder auch:

Code: Alles auswählen

unique(c(as.matrix(x)))
table(c(as.matrix(x)))
seraphin12345

Re: Duplikate in Excel löschen

Beitrag von seraphin12345 »

perfekt!!! danke schön
Antworten