我有一个10行的两个(用于测试)列数组(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列包含值<1,则希望获得具有T或F的另一个列10行向量。那一行是0。我想得到:
na_column neg_column
F F
F T
F T
T F
T F
F F
F T
T F
F F
F F
(is.na(cols))返回4,8,15。 它返回两个列数组的索引列表,就好像它被连接成一行一样被展平为一行。我希望它查看每一行,如果该行的任何列包含NA,则返回该行号。我应该得到4,5,8。
同样对于负值,我需要2,3,7。 我不知道如何做到这一点。在R中似乎应该很容易。
答案 0 :(得分:2)
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
答案 1 :(得分:2)
尝试此选项:
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
答案 2 :(得分:0)
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)))