R - удаление строк из data.frame - PullRequest
0 голосов
/ 08 ноября 2018

Я очень новичок в программировании и у меня есть основной вопрос (мой первый вопрос по stackoverflow :)) Я хочу удалить несколько строк из data.frame и использовать оператор if для этой учетной записи. Мой код работает, но, к сожалению, он не удаляет правильные строки, а вместо этого, я думаю, каждая вторая строка моего информационного кадра.

"myDataVergleich" - это имя моего data.frame. «myData $ QUESTNNR» - это столбец, по которому определяется, должна ли строка оставаться в кадре данных или нет.

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

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Мне нужно знать об ошибке, QUESTNNR% в% строк возвращает TRUE или FALSE и добавление! просто возвращает обратное, так что слово должно хорошо. Вы можете обнаружить часть строки с помощью str_detect из пакета 'stringr'.

library(dplyr)
library(stringr)
library(tibble)
library(magrittr)
df <- tibble(x = c('h', 'e', 'l', 'l', '0')) 
df %>% dplyr::filter(str_detect(x, 'l'))
0 голосов
/ 08 ноября 2018

Добро пожаловать в переполнение стека и R. Я думаю, что ваша интуиция верна, но есть некоторые проблемы. Сначала вы говорите, что ваши данные называются «myDataVergleich», но внутри вашего цикла вы обращаетесь к «myData». Поэтому вам может потребоваться изменить «myData $ QUESTNNR [i]» на «myDataVergleich $ QUESTNNR [i]» в цикле.

Отличительной особенностью R является то, что есть решения, которые люди уже нашли для многих проблем, одна из них - подстановка фрейма данных условием. Вы должны изучить семейство пакетов tidyverse, особенно dplyr в этом случае.

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

Если вы хотите сохранить строки с этими строками, этот код будет работать

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)

Если вы хотите сохранить строки, которые не содержат эти строки, этот код будет работать

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)

Надеюсь, это поможет

...