提问人:Emmr 提问时间:12/16/2022 更新时间:12/20/2022 访问量:22
根据特定值 (=> unique(table[[i]]$COLUMN)[1]) 对嵌套列表中的数据帧进行排序?
Ordering dataframes within a nested list based on a specific value (=> unique(table[[i]]$COLUMN)[1])?
问:
好。。深吸一口气
我有一个名为 tables 的嵌套列表,它是数据帧的列表。
这些数据框具有共同的基础和自己的特定条件列。 我有一个数量不明的此类数据框,我必须每周编译一次。
例如:
表[[1]]
# A tibble: 8 × 6
DATE SUPERVISOR SECTOR ACTIVITY `FERTILIZER#Criterion 1` `FERTILIZER#Criterion 2`
<dttm> <chr> <chr> <chr> <dbl> <dbl>
1 2022-10-05 00:00:00 BG SECTOR 1 FERTILIZER 1 0
2 2022-10-05 00:00:00 BG SECTOR 3 FERTILIZER 1 0
3 2022-10-05 00:00:00 BG SECTOR 6 FERTILIZER 1 1
4 2022-10-05 00:00:00 BG SECTOR 8 FERTILIZER 0 0
5 2022-10-05 00:00:00 BG SECTOR 9 FERTILIZER 0 0
6 2022-10-05 00:00:00 BG SECTOR 13 FERTILIZER 0 1
7 2022-10-05 00:00:00 BG SECTOR 14 FERTILIZER 0 0
8 2022-10-05 00:00:00 BG SECTOR 15 FERTILIZER 0 0
表[[2]]
# A tibble: 8 × 6
DATE SUPERVISOR SECTOR ACTIVITY `PLANTING#Criterion 1` `PLANTING#Criterion 2`
<dttm> <chr> <chr> <chr> <dbl> <dbl>
1 2022-11-10 00:00:00 AC SECTOR 6 PLANTING 1 0
2 2022-11-11 00:00:00 AC SECTOR 3 PLANTING 1 0
3 2022-11-12 00:00:00 AC SECTOR 6 PLANTING 1 1
4 2022-11-13 00:00:00 AC SECTOR 8 PLANTING 0 0
5 2022-11-14 00:00:00 AC SECTOR 10 PLANTING 0 0
6 2022-11-15 00:00:00 AC SECTOR 1 PLANTING 0 1
7 2022-11-16 00:00:00 AC SECTOR 1 PLANTING 0 0
8 2022-11-17 00:00:00 AC SECTOR 1 PLANTING 0 0
因此,当我将它们绑定在一起时,它会产生以下结果:
> library(dplyr)
> MEGATABLE <- bind_rows(tables)
> head(MEGATABLE)
# A tibble: 6 × 8
DATE SUPERVISOR SECTOR ACTIVITY `FERTILIZER#Criterion 1` `FERTILIZER#Criterion 2` `Planting#Criterio…` `Planting#Crit…`
<dttm> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 2022-10-05 00:00:00 BG SECTOR 1 FERTILIZER 1 0 NA NA
2 2022-10-05 00:00:00 BG SECTOR 3 FERTILIZER 1 0 NA NA
3 2022-10-05 00:00:00 BG SECTOR 6 FERTILIZER 1 1 NA NA
4 2022-10-05 00:00:00 BG SECTOR 8 FERTILIZER 0 0 NA NA
5 2022-10-05 00:00:00 BG SECTOR 9 FERTILIZER 0 0 NA NA
6 2022-10-05 00:00:00 BG SECTOR 13 FERTILIZER 0 1 NA NA
我通过 list.files(“TABLE_FILE”) 导入表,它们有随机名称,因此它们的顺序可能非常随机。因此,它们在“表”列表中的顺序将是随机的。因此,MEGATABLE中条件列的顺序也是随机的。如何根据 unique(tables[[i]]$ACTIVITY)[1]) 强制“表”中数据帧的顺序?因此,例如,我会决定在 MEGATABLE 中,我希望首先显示 PLANTING#Criteria,然后是 FERTILIZER#Criteria,然后是 COUNTING#Criteria,依此类推。
请注意,这些 critera 列的名称没有任何模式,因此我无法按名称排序。
提前致谢!
答:
0赞
Emmr
12/20/2022
#1
我用过这个,它起作用了(可能有更干净的方法。我很高兴知道):
v1 <- c("PLANTING","FERTILIZER","DRAINAGE","IRRIGATION")
b <- list()
for (j in 1:length(v1)) {
a <- list()
for (i in 1:length(tables)) {
if (unique(tables[[i]]$ACTIVITY)[1] == v1[j]) {
k <- length(a) + 1
a[[k]] <- tables[[i]]
b[[j]] <- bind_rows(a)
}
}
}
MEGATABLE <- bind_rows(b)
评论
tables
PLANTING
unique(tables[[i]]$ACTIVITY)[1])
v1 <- c("PLANTING", "FERTILIZER"); bind_rows(tables[match(sapply(tables, function(x) x$ACTIVITY[1]), v1)])