R:替换有[x]行,数据有[y] - 新变量中线性模型的残差

时间:2018-05-01 03:49:27

标签: r

我正在尝试在我的数据框中创建一个名为“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

1 个答案:

答案 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"))