在R中应用3种方法频率表的列表



我有一个3种方式的频率表,我想把它们组合成一个列表,通常我写listOfTable <- list(table[,,1],table[,,2],table[,,3],table[,,4],table[,,5]),有时我的表很长,有任何方法我可以应用lapply组合成一个列表,而不需要手动。

df <- data.frame(ID = c(rep(c("A","B","C"),5)),
             N = c(rep(c("1","2","3"),5)),
             M = c(rep(1,3),rep(2,3),rep(3,3),rep(4,3),rep(5,3)))
applyAlist <- table(df$ID,df$N,df$M)
listOfTable <- list(applyAlist[,,1],applyAlist[,,2],applyAlist[,,3],applyAlist[,,4],applyAlist[,,5])

我们可以通过循环遍历第三维序列并基于该序列子集' applylist '来实现lapply

lapply(seq(dim(applyAlist)[3]), function(i) applyAlist[,,i])

由于OP需要list输出,lapply总是给出该输出。对于sapply,默认选项是simplify = TRUE,因此当元素的length相同(如果我们没有将选项更改为simplify = FALSE)时,它将返回matrixvector。在list元素与class元素不同的情况下,这将变得更加明显并具有破坏性。

lst <- list(a = 1:3, b = rep(letters[1:3], 2), c = 2:4)
lapply(lst, unique)
#$a
#[1] 1 2 3
#$b
#[1] "a" "b" "c"
#$c
#[1] 2 3 4
sapply(lst, unique)
#      a   b   c  
#[1,] "1" "a" "2"
#[2,] "2" "b" "3"
#[3,] "3" "c" "4"

,

sapply(lst, unique, simplify = FALSE)
#$a
#[1] 1 2 3
#$b
#[1] "a" "b" "c"
#$c
#[1] 2 3 4

simplify

更改后得到与lapply相似的结果

最明显的方法是,

sapply(1:5, function(i) list(applyAlist[,,i]))

最新更新