Удаление подмножества при завершении создания новых переменных

#r

#r

Вопрос:

Я работаю над подмножеством нескольких переменных в наборе данных, чтобы удалить точки данных, которые бесполезны. Когда я ввожу команду subset для первой переменной и проверяю набор данных, переменная была правильно подмножеством. Однако после выполнения того же самого со второй переменной первая больше не является подмножеством в наборе данных. Кажется, что вторая команда подмножества переопределяет первую. В примере, который я привел ниже, первая переменная (высота) больше не является подмножеством, как только я подмножу вторую переменную (вес). Есть мысли о том, как это решить?

 rTestDataSet = TestDataSet
rTestDataSet = subset(TestDataSet, TestDataSet$Height < 4)
rTestDataSet = subset(TestDataSet, TestDataSet$Weight < 3)
  

Комментарии:

1. Вы применяете оба подмножества к исходным данным. Что вам нужно сделать, это применить одно подмножество, сохранить его в переменной, а затем применить второе подмножество к этой новой переменной. Попробуйте следующее: rTestDataSet = TestDataSet rTestDataSet = подмножество (rTestDataSet, rTestDataSet$Height < 4) rTestDataSet = подмножество (rTestDataSet, rTestDataSet$Weight < 3)

2. subset не изменяет передаваемый вами фрейм данных, он возвращает новый. В оригинале все еще есть все данные. Обратите внимание, что вы можете комбинировать несколько фильтров за один шаг, если хотите, и вам не нужно использовать $ в параметрах подмножества: subset(TestDataSet, Height < 4 amp; Weight < 3)

3. @divibisan Ты действительно в это веришь? Похоже, это просто напыщенная речь против нестандартной оценки, которая также применима ко всей tidyverse.

4. @MrFlick Вы знаете, это то, чему я научился, когда впервые начал работать с R и никогда не задавался вопросом.

5. @divibisan Я считаю, что subset() (как и tidy filter()) намного превосходит его в том, что он более удобочитаем. Конечно, оба варианта сложнее использовать в функциях, но это компромисс.

Ответ №1:

Вы применяете оба подмножества к исходным данным. Что вам нужно сделать, это применить одно подмножество, сохранить его в переменной, а затем применить второе подмножество к этой новой переменной. Также, как уже указывалось, вам не нужен $ при использовании subset.

попробуйте это:

Создайте некоторые воспроизводимые данные:

  set.seed(50)
 TestDataSet <- data.frame("Height" = c(sample(1:10,30, replace = T)), Weight = sample(1:10,30, replace = T) )

 rTestDataSet = TestDataSet
 rTestDataSet = subset(rTestDataSet, Height < 4)

rTestDataSet 
   Height Weight
3       3      5
6       1      7
9       1      4
10      2      5
12      3      9
14      1      1
15      3      1
19      1      8
20      2      9
22      2      8
28      3      6

 rTestDataSet = subset(rTestDataSet, Weight < 3)

rTestDataSet
Height Weight
14      1      1
15      3      1
  

Ответ №2:

Почему бы не использовать tidyverse ? Объедините операции вместе, чтобы создать свою собственную логику. Вместо subset этого вы можете использовать filter для получения нужных вам строк условно:

 library(tidyverse)
TestDataSet %>%
  filter(Height < 4) %>%
  filter(Weight < 3)
  

или

 TestDataSet %>%
  filter(Height < 4 amp; Weight < 3)