как сделать вектор разных значений в R - PullRequest
1 голос
/ 23 апреля 2020

У меня есть матрица (data1), похожая на:

  gene       S869      S907       S909   S016          S090         S160
1 S1          0          0          0   0.000000          0          0
2 S2          0          0          0   0.000000          0          0
3 S3          0          0          0   0.423405          0          0
4 S4          0          0          0   0.000000          0          0
5 S5          0          0          0   0.000000          0          0
6 S6          0          0          0   0.000000          0          0

Я хочу сделать вектор (скажем, X) для этой матрицы. У меня есть другой набор данных (data2), который выглядит следующим образом:

Cultivar  Dose
S869  10
S907  5
S909  7
S016  19
S090  15
S160  12

Затем я хочу сделать линейную регрессию, используя

for (gene in 1:ngenes){
model = lm(Dose~X[gene,])
}

, а также хочу получить значения p из вышеуказанной регрессии. Заранее спасибо!

1 Ответ

1 голос
/ 23 апреля 2020

Если мы хотим использовать 'Cultivar' для извлечения имен столбцов, l oop поверх 'Cultivar', 'Dose' соответствующих значений с Map, извлеките столбец на основе значения 'Culivar' для ' data1 ', создайте новый столбец' Dose 'с transform и примените lm, извлеките значения p из coef ficients

lst1 <-  Map(function(x, y) {
   tmpdat <- transform(as.data.frame(data1)[x], Dose = y)
   model <- lm(Dose ~ ., data = tmpdat)
   coef(summary(model))[, "Pr(>|t|)"]}, data2$Cultivar, data2$Dose)

lst1
#$S869
#[1] 1.218223e-78

#$S907
#[1] 1.218223e-78

#$S909
#[1] 2.265096e-79

#...

data

data1 <- structure(list(gene = c("S1", "S2", "S3", "S4", "S5", "S6"), 
    S869 = c(0L, 0L, 0L, 0L, 0L, 0L), S907 = c(0L, 0L, 0L, 0L, 
    0L, 0L), S909 = c(0L, 0L, 0L, 0L, 0L, 0L), S016 = c(0, 0, 
    0.423405, 0, 0, 0), S090 = c(0L, 0L, 0L, 0L, 0L, 0L), S160 = c(0L, 
    0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

data2 <- structure(list(Cultivar = c("S869", "S907", "S909", "S016", "S090", 
"S160"), Dose = c(10L, 5L, 7L, 19L, 15L, 12L)), class = "data.frame", 
row.names = c(NA, 
-6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...