#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)