簡體   English   中英

計算矩陣中列表中的項目數 R

[英]Count number of items within lists within matrix R

我有兩個矩陣,其中矩陣中的一些單元格為 NA,而其他單元格則填充有數字列表。 我需要的是一種計算矩陣每個單元格的每個列表中的項目數的方法。

這是矩陣:

> matrix_1
     [,1]      [,2]     
[1,] NA            c(1001, 1002)
[2,] c(1001, 1003) NA       

這是我要找的東西:

     [,1]    [,2]     
[1,] NA      2
[2,] 2       NA     

實際數據集要大得多——所以我試圖避免循環。

這是輸出:

Matrix 1 = structure(list(NA, c(1001, 1003), c(1001, 1002), NA), .Dim = c(2L, 
2L))

也許你可以嘗試lengths + replace如下

> replace(lengths(matrix_1),which(is.na(matrix_1)),NA)
     [,1] [,2]
[1,]   NA    2
[2,]    2   NA

你可以決定這樣做:

NA^is.na(matrix1) * lengths(matrix1)
     [,1] [,2]
[1,]   NA    2
[2,]    2   NA

甚至:

 `is.na<-`(lengths(matrix1), is.na(matrix1))
     [,1] [,2]
[1,]   NA    2
[2,]    2   NA

看來你對問題的描述和預期的output略有不同。

包含單個NA的列表元素中的項目數是 1,而不是 NA。 所以這個問題的答案是:

 matrix1=matrix(list(NA,c(1001,1003),c(1001,1002),NA),nrow=2)
answer=array(lengths(matrix1),dim=dim(matrix1))
answer
#      [,1] [,2]
# [1,]    1    2
# [2,]    2    1

但是,如果您想將與單個NA條目對應的所有元素本身轉換為NA (與您的預期輸出一致),您可以執行額外的步驟:

answer[is.na(matrix1)]=NA
answer
#      [,1] [,2]
# [1,]   NA    2
# [2,]    2   NA

請注意,最后一步將不會檢測到多個項目的元素,其中一些是NA ...(您需要使用answer[sapply(matrix1,function(x) any(is.na(x)))]=NA代替)。

暫無
暫無

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

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