【发布时间】:2017-01-02 08:56:26
【问题描述】:
我有一个很大的data.frame 与基因组数据。
数据看起来像这样——
colnames(df)=c("id","chr","start","end","log2")
其中 id 是样本名称,chr 是染色体的编号,start 和 end 给出了染色体上的位置,log2 是在该位置读取的高/低。
因为有很多数据,而且很难理解发生了什么,所以我试图遍历每个样本 (id),并且对于每个染色体 (chr),我想计算分段中 log2 的中位数,假设所有在 1 到 10^7、1+10^7 到 2*10^7 之间的读取等等。
结果应该是一个新的data.frame,对于每个样本和每个染色体,我应该有几行,开始和结束指示我在哪个片段中,最后一个值将是那个片段的中位数。
我想我需要使用tapply() 并检查样本,并在其中使用tapply() 并检查染色体,然后在每个染色体中,在“开始”位置上循环? (假设我只关心起始坐标是否在范围内)
不确定如何解决这个问题。
任何提示、提示、方向将不胜感激。
可重现的例子-
# fabricated data, 4 samples
# 24 chromosomes in each sample
# 61 ranges in each chromosome
df <- data.frame(id = rep(c('F1','F2','M1','M2'), each = 24*61),
chr = rep(rep(c(1:22,'x','y'), each = 61),4),
start = rep(seq(1,25*10^6 - 99, length.out = 61),times = 24*4),
end = rep(seq(100,25*10^6, length.out = 61),times = 24*4),
log2 = rnorm(4*24*61))
# output should look something like this-
id chr start end median_log_2
"F1" "1" 1 8000000 0.002
"F1" "1" 8000001 16000000 0.00089
"F1" "1" 16000001 24000000 -0.0011
"F1" "1" 24000000 25000000 0.108
"F1" "2" 1 8000000 -0.0012
"F1" "2" 8000001 16000000 0.0089
"F1" "2" 16000001 24000000 0.00311
"F1" "2" 24000000 25000000 0.0128
...
...
【问题讨论】:
-
不要用文字描述,只需发布reproducible example 和预期的输出。
-
我将添加一个可重现的示例(就像您想问的那样),但我真的认为这不会让任何事情变得更清楚。
-
“就像我想问的那样”是什么意思???你认为这是个人选择吗?还是我想“欺负”你?我正在努力帮助您(很好),可重复的示例和预期的输出使我(和其他人)更容易帮助您。你在这里问了 16 个问题。我不应该告诉你这样的事情,你不应该那样做 cmets。
-
不是专门针对你的,但我在这里绕了一圈,我可能会弄错,但在我看来,在很多问题中肯定会要求一个可重复的例子,即使可重复的示例并没有使任何事情变得更清楚。
-
如果我冒犯了你,我真的很抱歉,我真的不是故意的..