从数据框中提取行

时间:2018-10-10 17:53:51

标签: r

#Simulated data /model output
data1 <-data.frame(col1=c(10,20,30,40,50,60,70,80,90,100), 
                col2=c(2,4,6,8,10,12,14,16,20,22),
                col3=c(3,9,12,15,18,21,24,27,30,33),
                col4= c(4,8,12,16,20,24,28,32,36,40))

#Lower 95% CI from real data                    
lowdata <- as.data.frame(matrix(0,1,4))
                       lowdata[,1] <-5
                       lowdata[,2] <-34
                       lowdata[,3] <-25
                       lowdata[,4] <-30

# Higher 95% CI from real data
highdata <-as.data.frame(matrix(0,1,4))
                       highdata[,1] <- 59
                       highdata[,2] <- 60
                       highdata[,3] <- 50
                       highdata[,4] <- 49

我是R编程新手,不确定如何执行以下操作。

我想从根本上找出data1的哪几行的值(每一列)在两个数据帧(lowdata1和highdata1)中的两个定义的Cis内。

我已经尝试过了,但是它需要每个值而不是行:

wmax <- which(data1[,1:4] < highdata1[,1:4])
wmin <- which(data1[,1:4] > lowdata1[,1:4])
w <- intersect(wmax, wmin)

我如何才能实现提取data1中哪些行基本上“适合”配置项之间?

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令检查每列的每个元素是否在相应的间隔中:

is.btwn <- 
  Map(function(x, low, high) x >= low & x <= high,
      data1, lowdata, highdata)

is.btwn
# $col1
#  [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
# 
# $col2
#  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 
# $col3
#  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
# 
# $col4
#  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE

您可以使用Reduce来获取所有列都在间隔中的行,但是在这种情况下,没有这样的行

Reduce(`&`, is.btwn)
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

或在相应间隔内具有任意列的行

Reduce(`|`, is.btwn)
# [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE

所有这些结果都可以传递给which以获取值为TRUE的索引