根据两列值检索行

问题描述 投票:1回答:2

我有以下数据集:

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)时,检索了所有我不想要的类。

r
2个回答
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
投票

只需使用过滤器,选择所有非零项目类并再次使用%in%过滤器

dataset[!dataset$Class%in%dataset$Class[dataset$AC!=0],]
      Class AC
4 generator  0
7 generator  0
9 generator  0
© www.soinside.com 2019 - 2024. All rights reserved.