将范围扩展为R中表中的连续数字列表

时间:2017-01-11 23:34:34

标签: r

以下是我的表格中包含ID,A和B列的示例:

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

我想将此转换为具有相同ID的表中的连续数字列表(增加1+)。这是我想要的表格的一个例子:

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

我在R中的表上用seq(...)尝试了这个,我使用了冒号函数,但是我收到了相同的警告信息,如下所示:

警告讯息: 1:在x6 $ S1:x6 $ E1:   数值表达式有281个元素:只使用第一个

有没有人知道解决这个问题的方法?我已经能够在perl中使用数组,但我无法保留ID。

干杯,

丹尼尔

1 个答案:

答案 0 :(得分: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