首页 > 解决方案 > 如何在R中制作不同值的向量

问题描述

我有一个矩阵(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 值。先感谢您!

标签: r

解决方案


如果我们想使用'Cultivar'来提取列名,循环遍历'Cultivar','Dose'对应的值Map,根据'data1'的'Culivar'值提取列,创建一个新列'Dose ' 使用transform并应用,从fcientslm中提取 p 值coef

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

#...

数据

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))

推荐阅读