以下是我的表格中包含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。
干杯,
丹尼尔
答案 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