我有一个n行和3
的数据帧df <- data.frame(start=c(178,400,983,1932,33653),
end=c(5025,5025, 5535, 6918, 38197),
group=c(1,1,2,2,3))
df
start end group
1 178 5025 1
2 400 5025 1
3 983 5535 2
4 1932 6918 2
5 33653 38197 3
我想创建一个新列df$group2
,重新对重叠的组进行重新分类。例如,df$group[df$group==1]
从178开始,到5025结束。这与df$group[df$group==2]
重叠,从{9}开始,到6918结束。我想创建一个新列,现在将第1组和第2组分类为第1组(随后第3组为第2组)。
结果:
df
start end group group2
1 178 5025 1 1
2 400 5025 1 1
3 983 5535 2 1
4 1932 6918 2 1
5 33653 38197 3 2
提前感谢您的帮助。
答案 0 :(得分:14)
您需要IRanges
个包裹:
require(IRanges)
ir <- IRanges(df$start, df$end)
df$group2 <- subjectHits(findOverlaps(ir, reduce(ir)))
> df
# start end group group2
# 1 178 5025 1 1
# 2 400 5025 1 1
# 3 983 5535 2 1
# 4 1932 6918 2 1
# 5 33653 38197 3 2
要安装IRanges
,请在R:
source("http://bioconductor.org/biocLite.R")
biocLite("IRanges")
要了解更多信息(手册等),请转到here
答案 1 :(得分:0)
我认为function onOpen(e) {
// Generate Form Number then add to Form Description
var str1 = Math.round(Math.random()*10000) + '0000';
var str2 = Math.round(Math.random()*10000) + '0000';
var formNumber01 = str1.slice(0,4);
var formNumber02 = str2.slice(0,4);
var formNumber = 'Unique Form # ' + formNumber01 + "-" + formNumber02;
// Identify active form
var form = FormApp.getActiveForm();
// Add Form Number to Form Description
form.setDescription(formNumber);
// entry.1542424645()
}
可以实现:
data.table::foverlaps