【发布时间】:2018-01-31 23:42:08
【问题描述】:
我想使用前 3 列中的变量对数据框执行 lm,但不包括另一列中有 NA 的行(比如第 5 列)。 (我稍后需要这个来做方差分析)。我需要反复执行 lm ,每次都排除在不同列中包含 NA 的不同行集(例如第 6、7、8 列 ...)。真正的数据框有 100,000 列 x 200,000 行,需要 lm 运行约 100000 次。 假设我想运行 lm(pheno~Chip+Sex+Height, data=My_df) 但排除 rs533317162_T.x 列中有 NA 的行?然后我想做同样的事情,但排除下一列(rs550410894_C.x)中有 NA 的行。
我的_df:
Sex Height Age pheno rs533317162_T.x rs550410894_C.x rs563620164_C.x rs10465242_G.x
2 161.0 50 -0.557 0 0 0 0
2 170.0 69 1.757 0 0 0 0
2 166.0 52 1.262 NA 0 0 0
1 171.0 68 0.144 0 0 0 0
1 178.0 66 0.034 0 0 0 0
2 156.0 54 0.098 NA 0 0 0
2 157.0 61 1.706 0 0 0 0
1 182.0 62 -0.651 1 0 1 1
2 162.0 57 -0.920 0 0 0 0
2 163.0 51 2.237 0 0 0 0
2 165.0 48 -0.294 0 0 0 0
2 167.0 42 -0.911 1 0 0 0
1 180.0 64 -0.717 NA 0 1 1
列列表:
SNP <- c("rs533317162_T.x", "rs550410894_C.x", "rs563620164_C.x", "rs10465242_G.x")
lm函数:
My_lms <- lapply(1:4, function(x)
lm(pheno~Sex+Height+Age, data = subset(My_df, !is.na(SNP[[x]]))))
这将返回四个 lm 中每一个的所有行。 SNP 列中带有 NA 的行仍然在 lm 中使用。如果我手动输入列名而不是 SNP [[x]],它会起作用并排除带有 NA 的行。我也尝试过在 lm 公式中使用权重的类似方法,但没有成功。我认为问题在于 SNP[[x]] 没有被使用或读取。
谢谢。
【问题讨论】: