我有一个1644948 obs的大型数据框。 5个变量。
数据[,5]有1138个唯一值。我想为数据[,5]中的每个唯一元素找到数据[,3]的第一个值和数据[,4]的最后一个值。
data= sampleID chr start end mean
X536827A01 1 2999931 3000071 -0.015
X536827A01 1 3018277 3018417 -0.015
X536827A01 1 3036183 3036323 -0.015
X536827A01 1 3054557 3054697 -0.015
答案 0 :(得分:3)
如果订购了开始,结束值,您可以尝试以下代码。 setDT
将“data.frame”转换为“data.table”。我们按“mean”和“sampleID”(by=list(mean, sampleID)]
)分组,最后得到“start”(start[1]
)的第一个值和“end”(end[.N]
)的最后一个值。这里,.N
给出了每组唯一分组变量的行数。
library(data.table)
setDT(data)[,list(start=start[1], end=end[.N]) , by = list(mean, sampleID)]
或使用unique
并将“key”指定为“mean”和“sampleID”列。创建一个“结束”列作为每组分组变量的“结束”的最后一个值。
unique(setDT(data)[, end:=end[.N], key=.(mean, sampleID)])
如果没有订购,正如@Roland在评论中提到的那样
setDT(data)[,list(start= min(start), end=max(end)) ,
by = list(mean, sampleID)]