R - Löschen von Zeilen aus data.frame

stimmen
0

Ich bin sehr neu r eine Programmierung und haben eine grundlegende Frage (meine erste auf Stackoverflow :)) ich einige Zeilen aus einer data.frame löschen möchten, und verwenden Sie eine if-Anweisung auf dieses Konto. Mein Code läuft, aber es löscht leider nicht die richtigen Zeilen, sondern jede zweite Reihe meines Datenrahmen, denke ich.

„MyDataVergleich“ ist der Name meines data.frame. „MyData $ QUESTNNR“ ist die Säule durch die entschieden wird, ob die Reihe soll in dem Datenrahmen oder nicht bleiben.

for(i in 1:nrow(myDataVergleich))
  {if(myData$QUESTNNR[i] != t0_mathe | myData$QUESTNNR[i] != t0_bio | myData$QUESTNNR[i] != t0_allg2 |
     myData$QUESTNNR[i] != t7_mathe_Version1 | myData$QUESTNNR[i] != t7_bio_Version1) 
    {myDataVergleich <- myDataVergleich[-c(i),] }}

Was mache ich falsch?

Veröffentlicht am 07/11/2018 um 23:33
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Willkommen Überlauf zu stapeln und zu R. Ich denke, Ihre Intuition richtig ist, aber es gibt einige Probleme. Zuerst sagen Sie Ihre Daten ‚myDataVergleich‘ genannt wird, aber innerhalb der Schleife Sie zugreifen ‚myData‘. So müssen Sie sich ändern 'myData $ QUESTNNR [i]' auf 'myDataVergleich $ QUESTNNR [i]' in der Schleife.

Eine große Sache über R ist, dass es Lösungen Menschen, die bereits für viele Probleme herausgefunden haben, von einem Zustand eines Datenrahmens Untereinstellungen ist einer von ihnen. Sie sollten die tidyverse Familie von Paketen schauen, besonders dplyr in diesem Fall.

install.packages('dplyr')
install.packages('magrittr')

Wenn Sie die Zeilen mit diesen Strings dieser Code behalten wollen arbeiten

library(dplyr)
library(magrittr)
strings <- c(
  "t0_mathe", "t0_bio", "t0_allg2", "t7_mathe_Version1", "t7_bio_Version1"
)
filtered_data <- myDataVergleich %>%
  dplyr::filter(QUESTNNR %in% strings)

Wenn Sie die Zeilen behalten möchten, dass dieser Code diese Zeichenfolgen enthalten nicht funktioniert

library(dplyr)
library(magrittr)
strings <- c(
  "t0_mathe", "t0_bio", "t0_allg2", "t7_mathe_Version1", "t7_bio_Version1"
)
filtered_data <- myDataVergleich %>%
  dplyr::filter(!QUESTNNR %in% strings)

hoffentlich hilft das

Beantwortet am 08/11/2018 um 01:51
quelle vom benutzer

stimmen
0

wenn ich versuche zu laufen:

    strings <- c("t0_mathe", "t0_bio","t0_allg", "Anmeldung_zur_Studie") 
myDataVerlauf <- myDataVerlauf %>% dplyr::filter(!myData.QUESTNNR, strings) 

Ich erhalte die folgende Fehlermeldung:

Fehler bei filter_impl (.data quo): Evaluation Fehler: Operationen möglich sind nur für numerische, logische oder komplexe Typen. Zusätzlich: Warnmeldung: In Ops.factor (myData.QUESTNNR): '!' nicht aussagekräftig für Faktoren -

Beantwortet am 08/11/2018 um 23:30
quelle vom benutzer

stimmen
0

Ich würde die Fehler wissen müssen, QUESTNNR% in% Strings gibt ein WAHR oder FALSCH und das Hinzufügen der! nur gibt das Gegenteil, so dass sollte Wort in Ordnung. Sie können einen Teil eines Strings mit str_detect aus dem ‚stringr‘ Paket erkennen.

library(dplyr)
library(stringr)
library(tibble)
library(magrittr)
df <- tibble(x = c('h', 'e', 'l', 'l', '0')) 
df %>% dplyr::filter(str_detect(x, 'l'))
Beantwortet am 08/11/2018 um 19:31
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more