Извлечь строки из фрейма данных - PullRequest
0 голосов
/ 10 октября 2018
#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 и не знаю, как сделать следующее.

Я хочу в основном выяснить, какие из строк данных1 имеют значения (для каждого столбца), которые находятся в пределах Cis, определяемого двумя двумя кадрами данных (lowdata1 и highdata1).

Я пробовал это, но оно принимает каждое значение, а не строку:

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

Как можно добиться извлечения того, какие строки в data1 в основном "вписываются" между CI?

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете проверить, находится ли каждый элемент каждого столбца в соответствующем интервале с помощью

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...