当虚拟变量为true时,我尝试使用lm
计算平均值。我有一个带有三个列(Sepal.Length,Sepal.Width和Dummy)的数据框。当cols之一包含NA
时,将排除整个行(即使我运行两个单独的回归),也会导致均值错误。当只有一个col包含NA
时,如何正确运行不排除整个行的多个回归(没有for循环)?
# setup mydata
mydata <- structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5, 5.4),
Sepal.Width = c(NA, NA, 3.2, 3.1, 3.6, 3.9), Dummy = c(1,
1, 1, 0, 0, 0)), row.names = c(NA, 6L), class = "data.frame")
mydata
# Sepal.Length Sepal.Width Dummy
# 1 5.1 NA 1
# 2 4.9 NA 1
# 3 4.7 3.2 1
# 4 4.6 3.1 0
# 5 5.0 3.6 0
# 6 5.4 3.9 0
# reg Sepal.Length ~ Dummy, Sepal.Width ~ Dummy
fit <- lm(data.matrix(mydata) ~ data.matrix(mydata["Dummy"]))
intercepts <- fit$coefficients[1,]
betas <- fit$coefficients[2,]
# calculate average when Dummy==1
intercepts + betas
# Sepal.Length Sepal.Width Dummy
# 4.7 3.2 1.0
# calculate average when Dummy==1 (does not match)
apply(data.matrix(mydata %>% filter(Dummy==1)), 2, mean, na.rm=TRUE)
# Sepal.Length Sepal.Width Dummy
# 4.9 3.2 1.0
答案 0 :(得分:0)
如果您按照this示例使用map
中的purrr
,这似乎可行。
library("dplyr")
library("purrr")
mydata %>% map(~lm(.x ~ Dummy, data=mydata)) %>% map("coefficients") %>% map(sum)
# $Sepal.Length
# [1] 4.9
# $Sepal.Width
# [1] 3.2
# $Dummy
# [1] 1