Перебирать строки - PullRequest
       2

Перебирать строки

0 голосов
/ 26 ноября 2018

Я знаю, что смогу найти это здесь, но у меня проблемы с R как новичком.Перенаправление туда, где можно найти ответ, также было бы очень полезно для меня, так как я рассмотрел множество других функций применения, но не понял их.У меня есть фрейм данных 'y', где я хочу перебрать строки и использовать эти координаты строк, чтобы получить значение из другого фрейма данных 't'.В Python вы можете перебирать строки и использовать индекс строки.Я также могу сделать это в R сейчас, но это очень медленно:

for (i in 1:nrow(y)) {
  y$pvalue[i] <- min(t$pvalue[t$Start <= y$Start[i] & t$Stop >= y$Stop[i]])
}

Как можно ускорить это с помощью функции, такой как Apply?Синтаксис меня действительно смущает.

Некоторые игровые данные:

t <- data.frame("Chromosome" = c(1,1,1,1,1,1,1), "Start" = 
c(0,5,10,15,20,25,30), "Stop" = c(10,15,20,25,30,35,40),"pvalue" = c(0.1,0.4,0.3,0.8,0.6,0.3,0.1))
my_list <- union(t$Start, t$Stop)
y <- data.frame('Start' =my_list[1:length(my_list)-1], "Stop" = my_list[-1])

Итак, у нас есть перекрывающиеся координаты, я пытаюсь получить наименьшее значение из t, которое соответствует ячейкам в 'у '.

Так получится как:

y <- data.frame('Start' =my_list[1:length(my_list)-1], "End" = my_list[-1], "pvalue" = c(0.1,0.1,0.3,0.3,0.6,0.3,0.1,0.1))

1 Ответ

0 голосов
/ 26 ноября 2018

Мы можем использовать mapply здесь

y$pvalue <- mapply(function(p, q) min(t$pvalue[t$Start <= p & t$Stop >= q]), 
                                     y$Start, y$Stop)

y
#  Start Stop pvalue
#1     0    5    0.1
#2     5   10    0.1
#3    10   15    0.3
#4    15   20    0.3
#5    20   25    0.6
#6    25   30    0.3
#7    30   35    0.1
#8    35   40    0.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...