排除特定行

Excluding specific rows

我已经设法操纵我的部分数据集以排除所有百分比覆盖值 0,但现在正在考虑排除某些年份的某些样方,这些样方中没有灰烬。我想知道是否有一种特定的方法可以指定我想从哪一年删除哪些样方,而不是从所有年份中删除样方,这不是我想要做的。

因为您的数据不是文本形式,这里有一个非常简单的模拟数据,足以代表这种情况:

dat <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), 
                 class = c("B", "A", "B", "B", "C", "B", "B", "C", "C")), 
                 class = "data.frame", row.names = c(NA, -9L))

dat
#    id class
# 1  1     B
# 2  1     A
# 3  1     B
# 4  2     B
# 5  2     C
# 6  2     B
# 7  3     B
# 8  3     C
# 9  3     C

假设我想排除任何在 class 中没有 C 值的 id。因此,应排除第 1、2、3 行。最简单的方法之一是使用 dplyr 包:

library(dplyr)
dat |> group_by(id) |> filter("C" %in% class)

#The result:

# A tibble: 6 × 2
# Groups:   id [2]
#     id class
#  <int> <chr>
#1     2 B    
#2     2 C    
#3     2 B    
#4     3 B    
#5     3 C    
#6     3 C   

注意逻辑是这样的,因为我想排除没有C的组,所以意味着我想保留C.

的组

因此使用%in%。它是一个检查特定模式是否匹配 table 的函数。本例中的模式是 C,table 是 class 列中的值。我想把这个函数应用到每一组id上,所以用了group_by(id)

因此,可以通过以下方式将这些步骤应用于您的数据:

yourdf |> group_by(Quadrat) |> filter("Ash" %in% CommonName)

基本 R 选项

如果您想在基础 R 中执行上述步骤,这里有一个选项:

dat |> 
  by(dat$id,function(x) x["C" %in% x$class,])|> 
  do.call(rbind, args = _)

#     id class
# 2.4  2     B
# 2.5  2     C
# 2.6  2     B
# 3.7  3     B
# 3.8  3     C
# 3.9  3     C