我正在尝试在我的数据框中创建一个名为“residuals”的新变量,它需要包含线性模型的残差。问题是R不喜欢它,因为输出只有718行而数据帧(data.frame.use)有796个。我想要的是完整的796个案例用残差或NA填充。如何让R加入NA?欢呼声。
data.frame.use$residuals <- resid(lm(FCNA ~ Age + Gender, data = data.frame.use))
错误$&lt; - .data.frame( tmp ,残差,值= c(-0.310800504671101,:替换有718行,数据有796
Unique_ID Age Gender EFL O C E A N FCPA FCNA FCP FCSC
1 75 19 2 1 2.750 4.000 2.250 4.500 3.250 2.666667 2.0 3.0 3.5
2 77 20 1 1 3.125 3.875 2.375 3.125 3.250 2.333333 1.2 2.0 1.5
3 79 19 1 1 3.500 4.250 4.125 2.125 2.375 2.666667 2.0 2.0 2.0
4 73 20 2 1 2.875 3.500 2.875 4.125 2.250 3.000000 2.4 3.0 2.5
5 76 19 1 1 3.375 4.125 3.625 4.000 2.500 4.000000 3.0 4.0 4.0
6 78 19 1 1 4.125 3.875 4.250 3.250 2.250 4.000000 2.0 3.5 2.0
FCR
1 3
2 1
3 2
4 3
5 4
6 4
答案 0 :(得分:0)
当存在NA时,函数broom::augment
会生成一列.rownames
,该列映射到原始数据框中的行号。
因此我们可以通过在原始数据中添加行号来加入。请注意,.rownames
的类型为字符,因此我们必须更改.rownames
或行号,以便类型匹配。
将所有这些放在一起,这样的事情应该有效。我假设你想要标准化残差.std.resid
。如果没有,请使用.resid
。
library(dplyr)
library(broom)
data.frame.use %>%
lm(FCNA ~ Age + Gender, data = .) %>%
augment() %>%
select(.rownames, .std.resid) %>%
right_join(mutate(data.frame.use, row = as.character(row_number())),
by = c(".rownames" = "row"))