Как я могу выбрать размер высоты и только два факторных уровня?
Я хотел бы выбрать интервал размера высоты (height >0.50
а также height < 1.00
) и всего два уровня в шаблоне (например: norm
а также esti
) внутри того же интервала размера высоты. Пример:
sp diameter height breaking pattern
actcon 15,10 9,50 no norm
actcon 8,90 9,46 no norm
actcon 7,00 9,40 no norm
actcon 12,50 9,25 no norm
actcon 8,60 9,00 no norm
actcon 7,70 8,76 no norm
actcon 0,80 0,50 yes norm
actcon 0,50 0,50 no norm
actcon 0,90 0,53 yes norm
actcon 0,55 0,54 no norm
actcon 0,65 0,54 no norm
actcon 1,10 0,50 no curv
actcon 0,85 0,93 no norm
actcon 1,20 0,94 no norm
actcon 1,30 0,94 no deit
actcon 0,90 0,94 no norm
actcon 2,10 0,94 yes norm
actcon 1,00 0,95 no norm
actcon 0,90 0,95 no norm
actcon 0,80 0,95 no norm
actcon 1,00 0,95 no norm
actcon 1,05 0,96 no norm
actcon 1,00 0,96 no norm
actcon 0,90 1,30 no esti
2 ответа
[Я вижу, что @akrun добавил то же решение в комментарии, когда я писал это]
Ты хочешь,
subdf <- subset(yourdf, subset = (height >0.50 & height < 1.00) &
pattern %in% c("norm","esti"))
который дает
> subdf
sp diameter height breaking pattern
9 actcon 0.90 0.53 yes norm
10 actcon 0.55 0.54 no norm
11 actcon 0.65 0.54 no norm
13 actcon 0.85 0.93 no norm
14 actcon 1.20 0.94 no norm
16 actcon 0.90 0.94 no norm
17 actcon 2.10 0.94 yes norm
18 actcon 1.00 0.95 no norm
19 actcon 0.90 0.95 no norm
20 actcon 0.80 0.95 no norm
21 actcon 1.00 0.95 no norm
22 actcon 1.05 0.96 no norm
23 actcon 1.00 0.96 no norm
Если вы хотите удалить уровни факторов, которые больше не существуют из-за поднабора,
> str(subdf)
'data.frame': 13 obs. of 5 variables:
$ sp : Factor w/ 1 level "actcon": 1 1 1 1 1 1 1 1 1 1 ...
$ diameter: num 0.9 0.55 0.65 0.85 1.2 0.9 2.1 1 0.9 0.8 ...
$ height : num 0.53 0.54 0.54 0.93 0.94 0.94 0.94 0.95 0.95 0.95 ...
$ breaking: Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 2 1 1 1 ...
$ pattern : Factor w/ 4 levels "curv","deit",..: 4 4 4 4 4 4 4 4 4 4 ...
Тогда вы можете сделать
subdf <- droplevels(subdf)
> str(subdf)
'data.frame': 13 obs. of 5 variables:
$ sp : Factor w/ 1 level "actcon": 1 1 1 1 1 1 1 1 1 1 ...
$ diameter: num 0.9 0.55 0.65 0.85 1.2 0.9 2.1 1 0.9 0.8 ...
$ height : num 0.53 0.54 0.54 0.93 0.94 0.94 0.94 0.95 0.95 0.95 ...
$ breaking: Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 2 1 1 1 ...
$ pattern : Factor w/ 1 level "norm": 1 1 1 1 1 1 1 1 1 1 ...
Но это может быть неправильно, в зависимости от вашей реальной проблемы в будущем.
Вы также можете скачать пакет "dplyr" и использовать функцию фильтра с оператором или. Использование dplyr в целом может быть более простым способом очистки данных.
install.packages("dplyr")
library(dplyr)
filter(subdf, height>.5|height<1,pattern=="norm"|pattern=="esti")
Этот код определяет subdf, так как фрейм данных говорит, что высота может быть больше пяти или меньше 1, где шаблон может быть "нормой" или "оценкой". Если вы хотите продолжить работу с этим подмножеством, вам нужно будет присвоить его другому. Это не меняет ваши исходные данные.