根据元素的特征对列表元素进行排序
Sorting Elements of a List by Characteristics of Those Elements
假设我有一个 table 的列表。每个 table 的列之一被命名并包含 NA 值的计数。例如,下例中的对象 'e' 在其最后一列中显示频率为 2:
a <- seq(1:5)
b <- c(NA,1,2,4,NA)
c <- a %>% data.frame(.,b)
d <- table(c[1], useNA = "always")
e <- table(c[2], useNA = "always")
f <- list(d, e)
有没有一种方法可以根据列表中每个 table 中找到的 NA 列中的 NA 数量对列表中的元素进行排序?例如,在上面的列表f中,元素[1]中的NA列(即tabled)表示0个NA,元素[2]中的NA列(即tablee)表示2个NA。由于 2 > 0 并且我想将列表中的元素从最多 NA 到最少 NA 进行排序,因此列表将重新排序为 list(e,d).
根据描述,我们可以遍历 list
('f') 的元素,将名称为 NA 的元素子集化,order
它递减并使用该索引重新排序 'f'.
f1 <- f[order(-sapply(f, function(x) x[is.na(names(x))]))]
identical(f1, list(e,d))
#[1] TRUE
假设我有一个 table 的列表。每个 table 的列之一被命名并包含 NA 值的计数。例如,下例中的对象 'e' 在其最后一列中显示频率为 2:
a <- seq(1:5)
b <- c(NA,1,2,4,NA)
c <- a %>% data.frame(.,b)
d <- table(c[1], useNA = "always")
e <- table(c[2], useNA = "always")
f <- list(d, e)
有没有一种方法可以根据列表中每个 table 中找到的 NA 列中的 NA 数量对列表中的元素进行排序?例如,在上面的列表f中,元素[1]中的NA列(即tabled)表示0个NA,元素[2]中的NA列(即tablee)表示2个NA。由于 2 > 0 并且我想将列表中的元素从最多 NA 到最少 NA 进行排序,因此列表将重新排序为 list(e,d).
根据描述,我们可以遍历 list
('f') 的元素,将名称为 NA 的元素子集化,order
它递减并使用该索引重新排序 'f'.
f1 <- f[order(-sapply(f, function(x) x[is.na(names(x))]))]
identical(f1, list(e,d))
#[1] TRUE