R 将一个矩阵分为两个矩阵,基于;不适用;

R 将一个矩阵分为两个矩阵,基于;不适用;,r,matrix,R,Matrix,现在,我必须根据带有“NA”值的列将此矩阵拆分为两个矩阵,一个包含所有“NA”,另一个不包含“NA” 输入: >k a u v [1,] "10" "mature" "MIMAT0000062" [2,] "20" "stemloop" "NA" [3,] "40" "mature_2" "MIMAT0000043" 输出应该是 >k1 a u v [1,] "10" "mature" "MIM

现在,我必须根据带有“NA”值的列将此矩阵拆分为两个矩阵,一个包含所有“NA”,另一个不包含“NA”

输入:

>k
       a    u         v
[1,] "10" "mature"    "MIMAT0000062"
[2,] "20" "stemloop"  "NA"
[3,] "40" "mature_2"  "MIMAT0000043"
输出应该是

>k1
       a    u         v
[1,] "10" "mature"    "MIMAT0000062"
[2,] "40" "mature_2"  "MIMAT0000043"

>k2
       a    u         v
[1,] "20" "stemloop"  "NA"

是否有任何函数可以执行此操作?

您可以按如下方式拆分矩阵“k”:

k1 <- k[which(rowSums(is.na(k))==0),]
k2 <- k[which(rowSums(is.na(k))>0),]

k1真正的NA没有任何引号,使用字符
“NA”
对您没有多大帮助。如果其中一个NA位于“u”列的第一行怎么办?还是只针对“v”列?在这种情况下,
lappy(split(seq_len(nrow(k1)),is.na(k1[,3])),function(i)k1[i,drop=FALSE])
(假设您有真正的NAs)“有什么函数可以做吗?”是的,有:
is.na()
@akrun我想就是
split(as.data.frame(k),is.na(k[,3]))
如果OP适合在list@DavidArenburg是的,它会起作用的。我只是想把它作为一个矩阵(尽管从输入数据来看这是不必要的),这样效果很好。但当我想要基于一个特定列进行拆分时,它失败了。因为它检查任何一个NA(即使任何其他列是NA,它也会拆分)。在这种情况下,
k1