Seite 1 von 1

Duplikate in Excel löschen

Verfasst: Di Aug 14, 2018 2:29 pm
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?

Re: Duplikate in Excel löschen

Verfasst: Di Aug 14, 2018 2:51 pm
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

Re: Duplikate in Ecxel löschen

Verfasst: Di Aug 14, 2018 3:08 pm
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

Re: Duplikate in Ecxel löschen

Verfasst: Di Aug 14, 2018 3:11 pm
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

Re: Duplikate in Ecxel löschen

Verfasst: Di Aug 14, 2018 3:13 pm
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

Re: Duplikate in Excel löschen

Verfasst: Di Aug 14, 2018 3:27 pm
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
...

Re: Duplikate in Excel löschen

Verfasst: Di Aug 14, 2018 3:37 pm
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)))

Re: Duplikate in Excel löschen

Verfasst: Di Aug 14, 2018 3:39 pm
von seraphin12345
perfekt!!! danke schön