r - 按 purrr::transpose 对列表进行排序,但缺少某些值

标签 r sorting transpose purrr

我想根据每个元素中“a”的数量对列表进行排序。

library("purrr")
data1 <- c("apple","appreciate","available","account","adapt")
data2 <- c("tab","banana","cable","tatabox","aaaaaaa")
list1 <- list(data1,data2)
ca <- lapply(list1, function(x) str_count(x, "a"))
t2 <- Map(split, list1, ca)
t3 <- transpose(t2)
> t3
$`1`
$`1`[[1]]
[1] "apple"   "account"

$`1`[[2]]
[1] "tab"   "cable"


$`2`
$`2`[[1]]
[1] "appreciate" "adapt"     

$`2`[[2]]
[1] "tatabox"


$`3`
$`3`[[1]]
[1] "available"

$`3`[[2]]
[1] "banana"

它丢失了data2中的“aaaaaaa”。我该如何解决这个问题?

我找到了一个解决方案:
data1 <- c("apple","appreciate","available","account","adapt")
data2 <- c("tab","banana","cable","tatabox","aaaaaaa","aaaaaaaaaaa")
list1 <- list(data1,data2)
ca <- lapply(list1, function(x) str_count(x, "a"))
k11<- flatten(Map(split, list1, ca))
k1<-split(k11, as.integer(names(k11)))

最佳答案

引用lionel的话:“transpose() 将列表列表视为隐式矩形表”。它不是为像当前这样的许多边缘情况而设计的。但是,您可以将所需的放在开头的较长的位置:transpose(t2[2:1]) .

但是,这种变通方法不能一概而论。我更喜欢以下方式 --- 将子列表合并为一个列表并再次拆分:

> t3 <- do.call(c, t2)
> split(t3, names(t3))
$`1`
$`1`$`1`
[1] "apple"   "account"

$`1`$`1`
[1] "tab"   "cable"


$`2`
$`2`$`2`
[1] "appreciate" "adapt"     

$`2`$`2`
[1] "tatabox"


$`3`
$`3`$`3`
[1] "available"

$`3`$`3`
[1] "banana"


$`7`
$`7`$`7`
[1] "aaaaaaa"

编辑

命名和未命名输入的函数:
data1 <- c("apple","appreciate","available","account","adapt")
data2 <- c("tab","banana","cable","tatabox","aaaaaaa","aaaaaaaaaaa")
list1 <- list(data1,data2)
names(list1) <- c("atf","bdfs")

f <- function(x){
    if(is.null(names(x))){
        names(x) <- make.names(seq_along(x))
    }
    dtf <- stack(x)
    res <- split(dtf, str_count(dtf$values, 'a'))
    lapply(res, function(y) split(y$values, y$ind, drop = TRUE) )
}

f(list1)

关于r - 按 purrr::transpose 对列表进行排序,但缺少某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52016061/

相关文章:

python - 如何转置二元向量

r - R 中使用 NA 进行条件转置

python - 如何在Python中单行解决矩阵转置?

list - 使用 sortWith 对链式元组列表进行排序

r - 是时候从矩阵对象中获取元素了

R markdown 引文中的页码

r - 绘制栅格,使色带偏差在零附近

r - 在 R 数据框中的所有列中搜索值

java - 数组排序器。输出错误

c# - 需要一种按日期对100 GB日志文件进行排序的方法