r - 如何在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 值。先感谢您!
解决方案
如果我们想使用'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))
推荐阅读
- tomcat - 如何将tomcat8端口8080改为80
- apache-spark - 写入配置单元表后停止自动取消数据帧
- apache - 更改 GeoServer 侦听器 IP 地址/端口
- r - 如何解决 R 包安装的内存问题
- c++ - 在一个类中向向量添加元素不适用于其他类
- html - 如何从谷歌图片中检索图片网址?
- git - 删除所有提交但保留所有文件更改
- python - 从没有循环的多级熊猫数据框中删除行列表
- python - 如何将 aiohttp 与 ThreadPoolExecutor 一起使用?
- google-cloud-dataflow - 是否可以在不中断的情况下修改具有 pub/sub 输入的 apache 光束流?