Циклическая перетасовка p-значения в 10 рядах блоков
Я относительно новичок в R, и я пытаюсь написать перестановку, чтобы повернуть мои p-значения в блоках 10. Вот глава моих данных.
> head(knockdown, n=10)
chrs position pval gene_symbol Site_Class
2L 4998 0.73842731 CG11023 UPSTREAM
2L 4998 0.73842731 l(2)gl DOWNSTREAM
2L 5092 0.18879142 CG11023 UPSTREAM
2L 5092 0.18879142 l(2)gl DOWNSTREAM
2L 5095 0.15217914 CG11023 UPSTREAM
2L 5095 0.15217914 l(2)gl DOWNSTREAM
2L 5317 0.00000209 CG11023 UPSTREAM
2L 5317 0.05224209 l(2)gl DOWNSTREAM
2L 5372 0.64378453 l(2)gl DOWNSTREAM
2L 5372 0.64378453 CG11023 UPSTREAM
Я хотел бы повернуть pval
в 10 рядных блоков 10 раз, и для каждого поворота вытащите информацию в gene_symbol
а также Site_class
относящийся к pval
которые меньше, чем 1e-5. От этого я бы ожидал увидеть различные gene_symbol
values coming through, however they will have kept their initial structure within the block, ie if the significant p-value is located at row 7 in the first block, it will be located at row 17 in the first rotation and associated with a different gene_symbol
, Спасибо за вашу помощь.
2 ответа
Получить индекс 110 р-значений, которые вас интересуют
idx <- which(knockdown$pval < 1e-5)
Вращение выглядит следующим образом (я думаю, что я получил эти 1 правильно - R на основе 1); получить доступ к значениям в вашем новом индексе, например,
step <- 10000
for (i in seq_len(1000)) {
idx <- ((idx + step - 1) %% nrow(knockdown)) + 1
## do something with these?
knockdown$gene_symbol[idx]
}
Используя деление по модулю, разбить на группы последовательных блоков по 10 длин, а затем вернуть те строки, которые соответствуют критерию pval:
knockdown <- rbind(knockdown, knockdown)
lapply( split(knockdown, 0:(nrow(knockdown)-1) %/% 10),
function(df) df[df$pval < 1e-5, ])
$`0`
chrs position pval gene_symbol Site_Class
7 2L 5317 2.09e-06 CG11023 UPSTREAM
$`1`
chrs position pval gene_symbol Site_Class
17 2L 5317 2.09e-06 CG11023 UPSTREAM