【发布时间】:2016-04-19 20:29:23
【问题描述】:
以下问题发生在闪亮的应用程序中,所涉及的数据是几个子集和修改的产物。因此,很难将可重现的数据集添加到此请求中(我无法在闪亮的块中设置 dput() )。我的请求似乎是一个合乎逻辑的问题,所以我会先尝试而不添加数据。
我有一个包含 3 列的 DF0: 年份:因子, SP:因子, IA:数字。
我用 SP 级别对其进行子集化,称为 DF1,但在此过程中丢失了一些 YEAR 级别。
我的代码使用 expand.grid 在子集中查找未使用的 YEAR 级别,然后将缺失的空行合并到子集中。目的是将缺失年份的 IA 值设置为“0”,并具有完整的时间序列。通过在我的原始数据集 DF 中进行请求,我设法获得了 YEAR 的所有级别。
AGG<-reactive({
DF2 <- with(DF1(), expand.grid(YEAR = levels(DF()$YEAR),SP = levels(DF0()$SP)))
DF2 <- merge(DF1(), DF2,by=c("YEAR", "SP"), all = TRUE)
DF2$IA[is.na(DF2$IA)] <- 0
DF2<-data.table(DF2)
})
基本上我合并具有相同结构的DF1和DF2:
DF1:
$ YEAR: Factor w/ 6 levels "2006","2007",..: 1 2 3 4 5 6
$ SP : Factor w/ 1 level "Aglais io (Linnaeus, 1758)": 1 1 1 1 1 1
$ IA : num 82.3 78.8 79.3 135.4 81.8 ...
DF2:
$ YEAR: Factor w/ 14 levels "2006","2007",..: 1 2 3 4 5 6 7 8 9 10 ...
$ SP : Factor w/ 1 level "Aglais io (Linnaeus, 1758)": 1 1 1 1 1 1 1 1 1 1 ...
$ IA : num 82.3 78.8 79.3 135.4 81.8 ...
- attr(*, ".internal.selfref")=<externalptr>
这两个数据集实际上合并了,但在此过程中我的 YEAR 级别失去了它们的顺序。
DF2
YEAR SP IA
2006 Aglais io (Linnaeus, 1758) 82.32
2007 Aglais io (Linnaeus, 1758) 78.79
2008 Aglais io (Linnaeus, 1758) 79.29
2009 Aglais io (Linnaeus, 1758) 135.35
2010 Aglais io (Linnaeus, 1758) 81.82
2014 Aglais io (Linnaeus, 1758) 51.26
2001 Aglais io (Linnaeus, 1758) 0.00
2002 Aglais io (Linnaeus, 1758) 0.00
2003 Aglais io (Linnaeus, 1758) 0.00
2004 Aglais io (Linnaeus, 1758) 0.00
2005 Aglais io (Linnaeus, 1758) 0.00
2011 Aglais io (Linnaeus, 1758) 0.00
2012 Aglais io (Linnaeus, 1758) 0.00
2013 Aglais io (Linnaeus, 1758) 0.00
levels(DF) (original)
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
levels(DF1) (subset)
2006 2007 2008 2009 2010 2014
levels(DF2) (recovered)
2006 2007 2008 2009 2010 2014 2001 2002 2003 2004 2005 2011 2012 2013
我尝试在多个 SO 帖子之后使用 order() 和 sort() 重新排序 DF2$YEAR,但没有一个对此产生影响。 YEAR 级别会在应用程序中自动找到,因此我无法手动设置顺序。
我应该如何恢复(或永远不会丢失)我的因子订单?
【问题讨论】:
-
您可以通过
DF2$YEAR <- factor(DF2$YEAR, levels = c("2001", "2002", ...))或DF2$YEAR <- factor(DF2$YEAR, levels = sort(as.integer(as.character(DF2$YEAR))))手动设置因子水平的顺序。希望这会有所帮助。 -
非常感谢,您的第二个解决方案有效!我将保留此提示以进行进一步合并!
-
@DrDom 然后将此作为答案传递
标签: r