[英]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
any
和all
在功能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.