Verwenden, wenn andere auf einen dataframe über mehrere Spalten
Ich habe einen großen Datensatz der Proben mit Deskriptoren, ob die Probe durchführbar ist - es sieht (Art), wie diesem hier, wo 'desc', ist die Spalte "Beschreibung" und "leer" zeigt die Stichprobe ist nicht sinnvoll:
desc x y z
1 blank 4.529976 5.297952 5.581013
2 blank 5.906855 4.557389 4.901660
3 sample 4.322014 4.798248 4.995959
4 sample 3.997565 5.975604 7.160871
5 blank 4.898922 7.666193 5.551385
6 blank 5.667884 5.195825 5.232072
7 blank 5.524773 6.726074 4.767475
8 sample 4.382937 5.926217 5.203737
9 sample 4.976908 3.079191 4.614121
10 blank 4.572954 4.772373 6.077195
Will ich mit einer if-else-Anweisung, um die Zeilen mit Daten unbrauchbar zu NA. Der Letzte Datensatz sollte wie folgt Aussehen:
desc x y z
1 blank NA NA NA
2 blank NA NA NA
3 sample 4.322014 4.798248 4.995959
4 sample 3.997565 5.975604 7.160871
5 blank NA NA NA
6 blank NA NA NA
7 blank NA NA NA
8 sample 4.382937 5.926217 5.203737
9 sample 4.976908 3.079191 4.614121
10 blank NA NA NA
Habe ich versucht, eine for-Schleife, aber ich habe Probleme dabei, die for-Schleife zu ändern, werden alle Spalten in einer Schleife. Meine wirklichen Datenbestand hat 40 Spalten, so möchte ich lieber nicht haben, um es zu verarbeiten in separate Schleifen! Hier ist der code zum ändern einer Spalte:
for(i in 1:length(desc)){
if(dat$desc[i] =="blank"){
dat$x[i] <- NA
}
else {
dat$x[i] <- dat$x[i]
}
}
Machte ich die sample-Daten mit diesem script:
desc <- c("blank", "blank", "sample", "sample", "blank", "blank", "blank", "sample", "sample", "blank")
x <- rnorm(10, mean=5, sd=1)
y <- rnorm(10, mean=5, sd=1)
z <- rnorm(10, mean=5, sd=1)
dat <- data.frame(desc,x,y,z)
Sorry, wenn dies ist eine grundlegende Frage, die ich damit verbracht habe, den ganzen Vormittag suchen in Foren und nicht in der Lage gewesen, eine Lösung zu finden.
Jede Hilfe ist sehr willkommen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Ihre Beispiel-dataset, das wird funktionieren;
Option 1, den Namen der Spalten zu ändern:
In Ihrer aktuellen Daten mit 40 Spalten, wenn Sie wollen einfach nur, um die letzten 39 Spalten NA, dann die folgenden können einfacher sein als die Benennung der einzelnen Spalten zu ändern;
Option 2 wählen Sie Spalten mit Hilfe einer Reihe:
Option 3, schließen Sie die 1. Spalte:
Option 4, schließen Sie eine benannte Spalte:
Wie Sie sehen können, gibt es viele Möglichkeiten, das zu tun diese Art der Bedienung (das ist weit von eine komplette Liste), und zu verstehen, wie jede dieser Möglichkeiten wird Ihnen helfen, ein besseres Verständnis der Sprache.
Mit Ihrem ersten Ansatz mit Schleifen dachte ich dieses:
Getestet habe ich es mit Ihren Daten und gearbeitet. Hoffe, dies ist nützlich für alle die sich mit loops, die in Zeilen und Spalten mit Bedingungen.
Können Sie dplyr und eine benutzerdefinierte Funktion zu mutieren Werte unter bestimmten Bedingungen.
`
`
Hier ist eine option, mit
set
ausdata.table
. Es sollte schneller sein als der Aufwand[.data.table
vermieden wird. Wir konvertieren die Daten.frame' zu 'Daten.Tabelle' (setDT(df1)
), eine Schleife über die Spalte Namen 'df1' (ohne die 'desc' Spalte'), weisen Sie die Elemente zu "NA", wo die logische Bedingung, 'ich' ist erfüllt.Oder anderen option (basierend auf @dww Kommentar)
set
wäre schnellSollte diese Arbeit. Aber mal ehrlich, wenn die Daten unbrauchbar ist, warum nicht löschen Sie die Zeilen insgesamt?
Hier ist ein weiterer dplyr-Lösung mit einer kleinen benutzerdefinierten Funktion und
mutate_each()
.