【问题标题】:R Add Missing Rows by Condition [duplicate]R按条件添加缺少的行[重复]
【发布时间】:2021-11-30 14:50:20
【问题描述】:

我有一个包含计数数据的数据集 ('DF1')。它看起来像这样:

Species Date Site n
AMCR 6/1/2021 SVC 14
AMCR 6/1/2021 BMA 1
AMCR 6/7/2021 SVA 2
AMCR 6/15/2021 SVA 9
AMCR 6/21/2021 SVA 18
AMCR 6/29/2021 SVA 18

但是,我的研究实际上有九个“站点”(SVC、BMA、SVA、BMC、TMA、TMC、SRA、SRC 和 MCC),并且每个站点都在相同的五个日期(2021 年 6 月 1 日)收集数据,2021 年 6 月 8 日、2021 年 6 月 15 日、2021 年 6 月 21 日和 2021 年 6 月 29 日)。 DF1 仅显示“n”中有计数的行,但如果没有计数,我希望数据框为每个站点的每个日期填充零计数,使其看起来像这样:

Species Date Site n
AMCR 6/1/2021 SVC 14
AMCR 6/7/2021 SVC 0
AMCR 6/15/2021 SVC 0
AMCR 6/21/2021 SVC 0
AMCR 6/29/2021 SVC 0
AMCR 6/1/2021 BMA 1
AMCR 6/7/2021 BMA 0
AMCR 6/15/2021 BMA 0
AMCR 6/21/2021 BMA 0
AMCR 6/29/2021 BMA 0
AMCR 6/1/2021 SVA 0
AMCR 6/7/2021 SVA 2
AMCR 6/15/2021 SVA 9
AMCR 6/21/2021 SVA 18
AMCR 6/29/2021 SVA 18
AMCR 6/1/2021 BMC 0
AMCR 6/7/2021 BMC 0
AMCR 6/15/2021 BMC 0
AMCR 6/21/2021 BMC 0
AMCR 6/29/2021 BMC 0
AMCR 6/1/2021 TMA 0
AMCR 6/7/2021 TMA 0
AMCR 6/15/2021 TMA 0
AMCR 6/21/2021 TMA 0
AMCR 6/29/2021 TMA 0
AMCR 6/1/2021 TMC 0
AMCR 6/7/2021 TMC 0
AMCR 6/15/2021 TMC 0
AMCR 6/21/2021 TMC 0
AMCR 6/29/2021 TMC 0
AMCR 6/1/2021 SRA 0
AMCR 6/7/2021 SRA 0
AMCR 6/15/2021 SRA 0
AMCR 6/21/2021 SRA 0
AMCR 6/29/2021 SRA 0
AMCR 6/1/2021 SRC 0
AMCR 6/7/2021 SRC 0
AMCR 6/15/2021 SRC 0
AMCR 6/21/2021 SRC 0
AMCR 6/29/2021 SRC 0
AMCR 6/1/2021 MCC 0
AMCR 6/7/2021 MCC 0
AMCR 6/15/2021 MCC 0
AMCR 6/21/2021 MCC 0
AMCR 6/29/2021 MCC 0

有没有办法通过检查这些日期和站点组合是否不存在来添加计数为 0 的行?

谢谢。

【问题讨论】:

标签: r if-statement rows


【解决方案1】:

dplyr/tidyr

library(dplyr)
library(tidyr)
dat %>%
  complete(Species, Date, Site, fill = list(n = 0))
# # A tibble: 15 x 4
#    Species Date      Site      n
#    <chr>   <chr>     <chr> <dbl>
#  1 AMCR    6/1/2021  BMA       1
#  2 AMCR    6/1/2021  SVA       0
#  3 AMCR    6/1/2021  SVC      14
#  4 AMCR    6/15/2021 BMA       0
#  5 AMCR    6/15/2021 SVA       9
#  6 AMCR    6/15/2021 SVC       0
#  7 AMCR    6/21/2021 BMA       0
#  8 AMCR    6/21/2021 SVA      18
#  9 AMCR    6/21/2021 SVC       0
# 10 AMCR    6/29/2021 BMA       0
# 11 AMCR    6/29/2021 SVA      18
# 12 AMCR    6/29/2021 SVC       0
# 13 AMCR    6/7/2021  BMA       0
# 14 AMCR    6/7/2021  SVA       2
# 15 AMCR    6/7/2021  SVC       0

基础 R

dat2 <- merge(dat, do.call(expand.grid, lapply(dat[,1:3], unique)), by = names(dat)[1:3], all = TRUE)
dat2
#    Species      Date Site  n
# 1     AMCR  6/1/2021  BMA  1
# 2     AMCR  6/1/2021  SVA NA
# 3     AMCR  6/1/2021  SVC 14
# 4     AMCR 6/15/2021  BMA NA
# 5     AMCR 6/15/2021  SVA  9
# 6     AMCR 6/15/2021  SVC NA
# 7     AMCR 6/21/2021  BMA NA
# 8     AMCR 6/21/2021  SVA 18
# 9     AMCR 6/21/2021  SVC NA
# 10    AMCR 6/29/2021  BMA NA
# 11    AMCR 6/29/2021  SVA 18
# 12    AMCR 6/29/2021  SVC NA
# 13    AMCR  6/7/2021  BMA NA
# 14    AMCR  6/7/2021  SVA  2
# 15    AMCR  6/7/2021  SVC NA
dat2$n <- ifelse(is.na(dat2$n), 0, dat2$n)
dat2
#    Species      Date Site  n
# 1     AMCR  6/1/2021  BMA  1
# 2     AMCR  6/1/2021  SVA  0
# 3     AMCR  6/1/2021  SVC 14
# 4     AMCR 6/15/2021  BMA  0
# 5     AMCR 6/15/2021  SVA  9
# 6     AMCR 6/15/2021  SVC  0
# 7     AMCR 6/21/2021  BMA  0
# 8     AMCR 6/21/2021  SVA 18
# 9     AMCR 6/21/2021  SVC  0
# 10    AMCR 6/29/2021  BMA  0
# 11    AMCR 6/29/2021  SVA 18
# 12    AMCR 6/29/2021  SVC  0
# 13    AMCR  6/7/2021  BMA  0
# 14    AMCR  6/7/2021  SVA  2
# 15    AMCR  6/7/2021  SVC  0

数据

dat <- structure(list(Species = c("AMCR", "AMCR", "AMCR", "AMCR", "AMCR", "AMCR"), Date = c("6/1/2021", "6/1/2021", "6/7/2021", "6/15/2021", "6/21/2021", "6/29/2021"), Site = c("SVC", "BMA", "SVA", "SVA", "SVA", "SVA"), n = c(14L, 1L, 2L, 9L, 18L, 18L)), class = "data.frame", row.names = c(NA, -6L))

【讨论】:

  • 很好的解决方案。谢谢!我知道这个问题由于与另一个问题相似而被关闭,所以我很抱歉。我发现很难知道首先搜索先前问题的必要搜索词。是否存在用于数据操作的高度使用 R 函数的文档,而不仅仅是单独的包文档?几个不同包的汇编?
  • 这样的文档有一百万个,其中绝大多数都不是那么好;-)。知道如何在 Stack(和搜索引擎)上搜索是一项后天的技能,其中大部分是知道要包含哪些合适的流行语,这需要经验和时间。这个问题作为骗子被关闭的事实有点因为没有找到其他问题而敲你,但在我看来,这不是关于:关闭它的目的是保留另一个问题的答案渗透到搜索的顶部,以便可以对其答案进行改进和重用。不用担心,雅各布,抱歉,没有简单的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2021-10-20
相关资源
最近更新 更多