以下问题发生在闪亮的应用程序中,涉及的数据是多个子集和修改的产物。因此很难获得可重现的数据集来添加到此请求中(我无法在闪亮的块中设置dput())。我的请求似乎是一个逻辑问题,所以我会先尝试而不添加数据。
我有一个带有3列的DF0: 年:因素, SP:因素, IA:数字。
我使用SP的级别对其进行子集化,称为DF1,但在此过程中会丢失一些YEAR级别。
我的代码使用expand.grid在子集中找到未使用的YEAR级别,然后将空缺少的行合并到子集中。目的是在缺失年份的IA上设置“0”作为值,并具有完整的时间系列。我通过在原始数据集DF中请求获得了YEAR的所有级别。
Asynctask.onPostExecute
基本上我合并具有相同结构的DF1和DF2:
DF1:
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)
})
DF2:
$ 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 ...
这两个数据集实际上是合并的,但在这个过程中,我的YEAR级别会松开它们的顺序。
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>
我尝试在多个SO帖子之后使用order()和sort()重新排序DF2 $ YEAR,但没有一个对此有影响。在应用程序中自动找到YEAR级别,因此我无法手动设置订单。
我应该如何恢复(或永不松散)我的要素订单?
答案 0 :(得分:0)
您可以通过
手动设置因子水平的顺序DF2$YEAR <- factor(DF2$YEAR, levels = c("2001", "2002", ...))
或
DF2$YEAR <- factor(DF2$YEAR, levels = sort(as.integer(as.character(DF2$YEAR))))
如果YEAR是一个因素,则需要这样一个复杂的调用as.integer(as.character(DF2$YEAR))
。如果YEAR是一个整数,你可以直接对YEAR进行排序。