r语言 - 根据特定值(=> 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中的标准列的顺序也是随机的。如何强制数据帧在";表格";基于唯一(表[[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)

最新更新