我有一个包含三列的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()
也没有成功。有什么建议吗?
谢谢!
1条答案
按热度按时间6pp0gazn1#
只需删除
complete
前面的group_by
,示例数据中缺少一个Species
(6而不是7),因此它只返回120个组合,但下面的代码是有效的: