Получить строки на основе двух значений столбцов - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть следующий набор данных:

Class      AC
eval       0.6
period     0.39
eval       0.0
generator  0.0
period     0.58
period     0.0
generator  0.0
eval       0.97
generator  0.0

Я хотел бы получить классы, где их AC равно нулю во всех строках. Исходя из предыдущего примера, класс generator должен быть получен, поскольку его AC всегда равен нулю.

Когда я попробовал следующую команду subset(dataset, AC == 0), были извлечены все классы, которые мне не нужны.

Ответы [ 2 ]

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

Просто используя фильтр, выберите все не нулевой класс элементов и снова используйте %in% фильтр

dataset[!dataset$Class%in%dataset$Class[dataset$AC!=0],]
      Class AC
4 generator  0
7 generator  0
9 generator  0
0 голосов
/ 18 ноября 2018

Вот несколько возможностей.

База R

i <- as.logical(with(dataset, ave(AC, Class, FUN = function(x) all(x == 0))))
dataset[i, ]
#      Class AC
#4 generator  0
#7 generator  0
#9 generator  0

Просто Class.

j <- with(dataset, tapply(AC, Class, FUN = function(x) all(x == 0)))
names(j)[j]
#[1] "generator"

И dplyr решение.

library(dplyr)

dataset %>%
  group_by(Class) %>%
  filter(all(AC == 0))
## A tibble: 3 x 2
## Groups:   Class [1]
#  Class        AC
#  <fct>     <dbl>
#1 generator     0
#2 generator     0
#3 generator     0

Данные.

dataset <- read.table(text = "
Class      AC
eval       0.6
period     0.39
eval       0.0
generator  0.0
period     0.58
period     0.0
generator  0.0
eval       0.97
generator  0.0                      
", header = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...