R - smazání řádky z data.frame

hlasů
0

Mám r programovací zcela nové a mají zásadní otázku (můj první, kdo na StackOverflow :)) Chci odstranit některé řádky z data.frame a použít if-výpis z tohoto důvodu. Můj kód běží, ale to bohužel není mazání správné řádky, ale místo toho každý druhý řádek mého datovém myslím.

„MyDataVergleich“ je název mého data.frame. „MYDATA $ QUESTNNR“ je sloupek, který se rozhoduje, zda se nový řádek, který by měl zůstat v datovém či nikoliv.

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),] }}

Co dělám špatně?

Položena 07/11/2018 v 23:33
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Vítejte na přetečení zásobníku a R. myslím, že vaše intuice je správná, ale tam jsou některé problémy. Za prvé, že vaše data se nazývají ‚myDataVergleich‘, ale uvnitř smyčky přistupujete ‚MyData‘. Takže možná budete muset změnit 'mydata $ QUESTNNR [i]' na 'myDataVergleich $ QUESTNNR [i]' ve smyčce.

Skvělá věc, o výzkumu je, že existují řešení, lidé zjistili, již řadu problémů, sub-nastavení datového rámce podle stavu, je jedním z nich. Měli byste se podívat do tidyverse rodiny balíků, zvláště dplyr v tomto případě.

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

Chcete-li zachovat řádky s tyto řetězce tento kód bude fungovat

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)

Chcete-li zachovat řádky, které neobsahují tyto řetězce tento kód bude fungovat

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)

Naděje, která pomáhá

Odpovězeno 08/11/2018 v 01:51
zdroj uživatelem

hlasů
0

pokud se pokusíte spustit:

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

Mám následující chybová zpráva:

Chyba v filter_impl (.data, quo): Chyba Hodnocení: operace jsou možné pouze u číselných, logických nebo komplexních typů. Navíc: upozornění: V Ops.factor (myData.QUESTNNR): '!' nemá smysl pro faktory -

Odpovězeno 08/11/2018 v 23:30
zdroj uživatelem

hlasů
0

Musel bych vědět chybu, QUESTNNR% v% řetězcích vrátí TRUE nebo FALSE a přidáním! Jen vrátí pravý opak, takže by slovo v pořádku. Můžete zjistit část řetězce s str_detect z ‚stringr‘ balíčku.

library(dplyr)
library(stringr)
library(tibble)
library(magrittr)
df <- tibble(x = c('h', 'e', 'l', 'l', '0')) 
df %>% dplyr::filter(str_detect(x, 'l'))
Odpovězeno 08/11/2018 v 19:31
zdroj uživatelem

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