我有一个名为new.cars
的数据框。我需要将线性回归公式应用于我的数据框中的所有列。 new.cars
中有数千列,因此在公式中指出它们中的每一列都是不可能的。有四列PCAs
在公式中对于我要应用此公式的所有其他列(PCAs
以外的列)保持相同。
第一列的公式(列mercedes
)是
fit1 <- lm(mercedes ~ PCA1 + PCA2+PCA3+PCA4, data=new.cars)
new.cars[,"mercedes"] <-fit1$fitted.values
所有其他汽车列的等等..
用fitted value
替换列值的最佳方法是什么(并且在列中省略NA值,这意味着我不想更改NA - 因为它们是空单元格并且需要不适合)?
new.cars<- structure(list(mercedes = c(1, 1, 1, 1), vw = c(1, 2, 0, NA),
camry = c(2, 0, 0, NA), civic = c(4, 1, 1, 1), ferari = c(2,
2, 2, 0), PCA1 = c(0.021122, 0.019087, 0.022184, 0.021464
), PCA2 = c(0.023872, 0.024295, 0.022471, 0.027509), PCA3 = c(0.000784,
0.001996, 0.003911, 0.006119), PCA4 = c(-0.004811, -0.003296,
0.001868, -0.001636)), .Names = c("mercedes", "vw", "camry",
"civic", "ferari", "PCA1", "PCA2", "PCA3", "PCA4"), row.names = c("S05-F13-P01.GT",
"S08-F10-P01.GT", "S08-F11-P01.GT", "S09-F66-P01.GT"), class = "data.frame")
答案 0 :(得分:1)
我们可能会遍历&#39; new.cars&#39;的names
。 (不是PCA
),使用&#39; PCA&#39;创建formula
paste
list
变量作为自变量,提取拟合值&#39;在NA
(&#39; lst&#39;)中。我们通过对来自&#39; new.cars&#39;的非PCA列进行子集化来创建新数据集(&#39; new1.cars&#39;)。为list
元素填充lst <- lapply(names(new.cars)[1:5], function(x)
lm(formula(paste(x, '~', paste0("PCA", 1:4, collapse="+"))), data= new.cars)$fitted.values)
new1.cars <- new.cars[1:5]
new1.cars[] <- lapply(lst, `length<-`,max(lengths(lst)))
,其长度小于“&#39;最大值”。 “&#39; lst&#39;中元素的长度并将输出分配给新数据集。
NA
如果列中只有lm
个值,我们可以创建一个例外,以避免在该
lst <- lapply(names(new.cars)[1:5], function(x) {
x1 <- new.cars[[x]]
if(all(is.na(x1))){
NA } else lm(formula(paste(x, '~', paste0("PCA", 1:4, collapse="+"))),
data= new.cars)$fitted.values
})
input:range
其余步骤与上述步骤相同。