根据两列值检索行

时间:2018-11-18 16:45:03

标签: r

我有以下数据集:

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 :(得分:2)

这里有几种可能性。

基本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)

答案 1 :(得分:1)

仅使用filter,选择所有非零的项目类别,然后再次使用%in%过滤器

dataset[!dataset$Class%in%dataset$Class[dataset$AC!=0],]
      Class AC
4 generator  0
7 generator  0
9 generator  0