好的深呼吸
我有一个名为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中的标准列的顺序也是随机的。如何强制数据帧在";表格";基于唯一(表[[i]]$ACTIVITY)[1])?因此,例如,我会决定在MEGATABLE中,我希望先显示PLATING#标准,然后显示FERTILIZER#标准,再显示COUNTING#标准,等等。
请注意,这些critera列的名称没有任何模式,所以我不能按名称排序。
提前感谢!
我用了这个,它起了作用(可能有一个更干净的方法。我很乐意发现):
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)