选择两个值符合特定阈值的行

时间:2014-10-24 09:01:36

标签: r

我正在使用R,我需要选择任何值为&gt;的行。 0.7和任何其他值< 0.4。 两个值应满足此要求。如果行中有另一个不适用于此值的值,我仍然想要使用此行。

Df的:

    A   B   C   D   E
1   NA  0.5 0.6 NA  NA
2   NA  0.2 0.8 NA  NA
3   NA  0.2 NA  0.6 NA
4   NA  0.6 0.1 0.8 NA

输出应如下所示:

    A   B   C   D   E
2   NA  0.2 0.8 NA  NA
4   NA  0.6 0.1 0.8 NA

2 个答案:

答案 0 :(得分:1)

尝试(感谢@akrun的编辑建议)

df[!!rowSums(df > .7, na.rm = TRUE) & !!rowSums(df < 0.4, na.rm = TRUE), ]
##    A   B   C   D  E
## 2 NA 0.2 0.8  NA NA
## 4 NA 0.6 0.1 0.8 NA

或(更糟糕的选择)

df[apply(df, 1, function(x) any(x > .7, na.rm = TRUE) & any(x < .4, na.rm = TRUE)), ]
#    A   B   C   D  E
# 2 NA 0.2 0.8  NA NA
# 4 NA 0.6 0.1 0.8 NA

答案 1 :(得分:1)

您也可以尝试:

 Df[intersect(which(Df >0.7, arr.ind=TRUE)[,1] , which(Df <0.4,arr.ind=TRUE)[,1]),]
 #     A   B   C   D  E
 #2 NA 0.2 0.8  NA NA
 #4 NA 0.6 0.1 0.8 NA

数据

 Df <- structure(list(A = c(NA, NA, NA, NA), B = c(0.5, 0.2, 0.2, 0.6
 ), C = c(0.6, 0.8, NA, 0.1), D = c(NA, NA, 0.6, 0.8), E = c(NA, 
 NA, NA, NA)), .Names = c("A", "B", "C", "D", "E"), class = "data.frame", row.names = c("1", 
 "2", "3", "4"))