2017-01-11 3 views
0

Вот в примере моей таблицы со столбцами ID, A и B:Расширение диапазона в список последовательных чисел в таблице в R

ID A  B 
5  1  758 
5  1  560 
50 500  8156 

Я хотел бы, чтобы преобразовать это в список последовательных числа (увеличение 1+) в таблице с тем же идентификатором. Вот пример таблицы Я хотел бы:

ID Position 
5 1, 2, 3 ... 758 
50 500, 501, 502 ... 8156 

Я попытался это на столе в R с SEQ (...) и я использовал функцию толстой кишки, однако я получаю такое же предупреждение следующим образом:

Предупредительные сообщения: 1: в x6 $ S1: x6 $ E1: численное выражение имеет 281 элементов: только первые используемые

кто-нибудь знает способ обойти это? Я смог сделать это с помощью массивов в perl, но мне не удалось сохранить идентификаторы.

Приветствия,

Daniel

ответ

0

С dplyr вы могли бы сделать:

library("dplyr") 
DF 
# ID A B 
#1 5 1 758 
#2 5 1 560 
#3 50 500 8156 


summaryDF = DF %>% 
     group_by(ID) %>% 
     summarise(minPos = min(A),maxPos = max(B)) %>% 
     as.data.frame() 

summaryDF 
# ID minPos maxPos 
#1 5  1 758 
#2 50 500 8156 

#you can modify step here, have chosen large step for ease in output 
step = 750  

#For each ID, we create a seq from minPos to maxPos and using paste0 
#to collapse into one string 

customFun = function(x) { 

data.frame(ID=x$ID,minPos=x$minPos,maxPos=x$maxPos,Position=paste0(seq(x$minPos,x$maxPos,step),collapse=","),stringsAsFactors = FALSE) 

} 

summaryDF = summaryDF %>% 
      group_by(ID) %>% 
      do(customFun(.)) %>% 
      as.data.frame() 

Выход:

summaryDF 
# ID minPos maxPos            Position 
#1 5  1 758             1,751 
#2 50 500 8156 500,1250,2000,2750,3500,4250,5000,5750,6500,7250,8000