R语言 无效列/对象名称的complete()出错

eanckbw9  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(218)

我有一个包含三列的CSV:Plot,整数向量; Species,字符向量; DBHClass,整数向量。CSV如下所示:

##Read in table
library(tidyverse)
PlotData <- tibble(Plot = c(1, 2, 2, 3, 3, 4, 4), 
                   Species = c("SNAG", "BLC", "AEL", "BASS", "REDO", "REDM", "BASS"), 
                   DBHClass = c(7, 11, 7, 9, 15, 17, 13)) %>% 
  print()

在讨论我的问题之前,我在DBHClass上使用了cut_width(),使列看起来像这样,并添加了另一列Exp.ac

#using cut_width()
PlotData <- PlotData %>%
  mutate(DBH2in = cut_width(PlotData$DBHClass, width = 2),
         Exp.ac = 20) %>%
  group_by(Plot, Species, DBH2in) %>% 
  print()

我想使用complete()函数外推此表,以便Species列中的每个唯一观测值都表示为Plot列中的每个唯一观测值。有7个Species是我想要在总共168行的所有4个Plot内的DBHClass的所有唯一观测中表示的,因此group_by(Plot, Species, DBH2in)。我为下一步推荐的代码如下所示,但是,这个错误出现在第1行:

#using complete()
PlotData <- PlotData %>%
  complete(Plot, Species, DBH2in,
           fill = list(Exp.ac = 0, DBHClass = 0)) %>%
  group_by(Plot, Species, DBH.2in)

Error in `dplyr::summarise()`:
! Problem while computing `..1 = complete(data = dplyr::cur_data(), ..., fill = fill, explicit = explicit)`.
ℹ The error occurred in group 1: Plot = 1, Species = "SNAG", DBH2in = "[7,9]".
Caused by error:
! object 'Plot' not found

为了避免这个问题,我尝试使用do(complete))和稍微不同的参数,我发现下面的参数不会抛出错误:

#using do(complete())
PlotData<- PlotData%>%
  group_by(Plot, Species, DBH2in) %>%
  do(complete(., Plot, Species, DBH2in,
              fill = list(Exp.ac = 20,
                          DBHClass = 0))) %>% 
  group_by(Plot, Species, DBH2in) %>% 
  print()

但是这只返回35行,例如在Plot 1中,显示的唯一Species是Species = "SNAG"。是什么原因导致complete()抛出此错误?(因为我推断它想要这样)并删除Plot以查看该列是否是一个不正确的类,但是同样的错误提示Species没有找到。使用其他相关函数如nesting()expand()也没有成功。有什么建议吗?
谢谢!

6pp0gazn

6pp0gazn1#

只需删除complete前面的group_by,示例数据中缺少一个Species(6而不是7),因此它只返回120个组合,但下面的代码是有效的:

PlotData %>%
  mutate(DBH2in = cut_width(PlotData$DBHClass, width = 2),
         Exp.ac = 20) %>%
complete(Plot, Species, DBH2in,
         fill = list(Exp.ac = 0, DBHClass = 0))

相关问题