У меня 2 data.framesпробегаем по data.frames
> head(cont)
old_pert cmap_name conc perturb_geo t1 t2 t3 t4 t5
1 5202764005789148112904.A02 estradiol 0.00000001 GSM119257 GSM119218 GSM119219 GSM119221 GSM119222 GSM119223
2 5202764005789148112904.A01 valproic acid 0.00050000 GSM119256 GSM119218 GSM119219 GSM119221 GSM119222 GSM119223
> head(expression)[1:3,1:8]
GSM118911 GSM118912 GSM118913 GSM118723 GSM118724 GSM118725 GSM118726 GSM118727
1007_s_at 387.6 393.2 290.5 378.6 507.8 383.7 288.8 451.9
1053_at 56.4 53.5 32.8 39.0 71.5 47.3 46.0 50.1
117_at 6.3 33.6 19.2 17.6 20.3 15.0 7.1 43.1
Я хочу, чтобы применить петлю сделать:
for(i in 1:nrow(cont)){
первым принять некоторые значения из cont
, которые будут использоваться впереди
vehicle <- cont[i, 5:9]
perturb <- cont[i, 4]
col_name <- paste(cont[i, 2], cont[i, 3], sep = '_') #estradiol_.00001
tmp <- sum(expression[,which(colnames(expression) == vehicle)])/5
tmp2 <- expression[,which(colnames(expression) == perturb)]
tmp3 <- tmp/tmp2
div <- cbind(div, tmp3)
colnames(div)[i + 1] <- col_name
}
Возьмите эти столбцы от expression
, где col.names == vehicle & perturb
и примените разделение.
div <- expression$vehicle/expression$perturb #I'm not getting how I can pass here the value in `vehicle` and `perturb`
Присвоить это новая переменная имя столбца, который должен быть комбинацией drug_name
и concentration
col.names(div) <- drug_name_concentration
присвоить ему row.names выражения:
row.names(div) <- row.names(expression)
Так что этот процесс будет итерация 271 раз (nrow(cont) = 271
) и каждый раз, когда новый разделимый столбец будет cbind
моим предыдущим div
. Следовательно, конечный результат будет:
arachidonic acid_0.000010 oligomycin_0.000001 .........
1007_s_at 0.45 0.30
1053_at 1.34 0.65
117_at 0.11 0.67
.....
.....
Логика понятна в моей голове, но я не получаю, как я могу это сделать. Спасибо за вашу помощь.
Благодаря пачкой. Это сработало. Мне было интересно, как это работает: в некоторых случаях имя 'col_name <- paste (cont [i, 5], cont [i, 6], sep = '_')' имеет одно и то же имя для 2 экземпляры и этот код обрабатывали его, указав имена «metformin_0.00001» и «metformin_0.00001.1». Можете ли вы объяснить, почему и как это произошло? – user3253470
Вы можете попробовать создать пустой вектор с 'col_names <- c()', а затем в цикле 'col_names <- c (col_names, paste (cont [i, 5], cont [i, 6], sep = '_ ')) 'очевидно удалить другой экземпляр' col_names' в цикле. а затем после цикла и после 'div <- div [, - 1]' присваивать имена столбцов через 'colnames (div) <- col_names' – amwill04
Хорошо, спасибо. Можете ли вы рассказать мне, каким будет возможное решение ситуации, когда 'perturb' содержит более 1 столбца, и я хочу взять' perturb = сумму столбцов/столбцов' и затем делить 'control/perturb' – user3253470