繁体   English   中英

如何获得两列矩阵中包含NA OR value <0的行的列表?

[英]How do I get a list of rows in a two column matrix that contain NA OR value < 0?

我有两个(用于测试)10行的列array(cols)。 例如cols

       V243  V247
1   693   761
2  -733   791
3   665  -756
4    NA   892
5   821    NA
6   752   819
7  1092 -1137
8    NA   943
9   675   720
10  600   645

如果ANY列在该行上包含NA,则希望获得一个带有T或F的一列10行向量,如果ANY列在该行上包含值<0,则我可以得到另一个带有T或F的一列10行向量。 我想得到:

na_column neg_column
F            F
F            T
F            T
T            F
T            F
F            F
F            T
T            F
F            F
F            F

which(is.na(cols))返回4、8、15。它返回两列数组的索引列表,就好像它被平整为一列并连接了列一样。 我希望它查看每一行,如果该行的ANY列包含NA,则返回该行号。 我应该得到4、5、8。

同样,对于负值,我需要2、3、7。我不知道如何执行此操作。 在R中似乎应该很容易。

df$na_column <- is.na(rowSums(df))
df$neg_column <- apply(df, 1, function(r) any(r < 0, na.rm = T))

df
#    V243  V247 na_column neg_column
# 1   693   761     FALSE      FALSE
# 2  -733   791     FALSE       TRUE
# 3   665  -756     FALSE       TRUE
# 4    NA   892      TRUE      FALSE
# 5   821    NA      TRUE      FALSE
# 6   752   819     FALSE      FALSE
# 7  1092 -1137     FALSE       TRUE
# 8    NA   943      TRUE      FALSE
# 9   675   720     FALSE      FALSE
# 10  600   645     FALSE      FALSE

试试这个选项:

df <- data.frame(v1=c(1,NA,-3), v2=c(4,5,NA))
rowSums(!is.na(df)) < ncol(df)
[1] FALSE  TRUE  TRUE

as.logical(rowSums(df < 0, na.rm=TRUE))
[1] FALSE FALSE  TRUE

数据:

  v1 v2
1  1  4
2 NA  5
3 -3 NA

演示

anyall在功能R是做什么,你想要什么。 因此在R中很容易

expl <- read.table(text="
          693   761
         -733   791
          665  -756
           NA   892
          821    NA
          752   819
         1092 -1137
           NA   943
          675   720
          600   645")

apply(expl, 1, function(x) any(is.na(x)))
apply(expl, 1, function(x) all(is.na(x)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM