簡體   English   中英

在多個嵌套列表中計數 R

[英]Count within multiple nested lists R

假設我有一個長度為 2 的列表,其中是另一個長度為 2 的列表,其中有一個編碼為 0、1 或 2 的數字數據框(請耐心等待!):

set.seed(42)
l1<-data.frame(sample(0:2, 5, replace = TRUE))
l2<-data.frame(sample(0:2, 5, replace = TRUE))
l<-list(l1,l2)
ll<-list(list(l,l), list(l,l))

我需要計算每個數據框中出現 1 或 2 的次數。 然后,我需要對上述級別的所有計數求和這些計數。

所以對於ll[[1]][[1]][[1]]計數為 1,對於ll[[1]][[1]][[2]]計數為 4。在這兩個中數據幀總和為 5。

為了對我正在處理的真實數據提供更簡單的英語描述:頂層是物種數量(在本例中為 2 個物種),下面的級別是記錄數據的年份(在本例中,數據是在 2 年不同的年份收集的)。 在其下方是記錄數據的位置。 我需要知道,在幾年內,有多少次 1 或 2 出現在所有位置(在那一年內)。

也許有更好的方法來描述這一點,但到目前為止我還沒有想到。 任何幫助,將不勝感激。

我們可以使用purrr函數。

library(purrr)
map(ll, function(x) transpose(x) %>% map(~sum(unlist(.x) != 0)))

#[[1]]
#[[1]][[1]]
#[1] 2

#[[1]][[2]]
#[1] 8


#[[2]]
#[[2]][[1]]
#[1] 2

#[[2]][[2]]
#[1] 8

有點嵌套,但解決方案應該有效:

lapply(ll, 
  function(l) 
    lapply(l, 
      function(li) sum(unlist(li) %in% 1:2)))

# [[1]]
# [[1]][[1]]
# [1] 5
#
# [[1]][[2]]
# [1] 5
# 
# 
# [[2]]
# [[2]][[1]]
# [1] 5
# 
# [[2]][[2]]
# [1] 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM