我有一个包含4个变量的数据集,这些变量之一是一个虚拟变量,用于说明个人是否从特定程序(退出)毕业。我需要创建一个循环,该循环将为3个变量中的每个变量创建两个新变量(dummy = 1的平均值和dummy = 0的平均值)。这是我的代码,我想使其更高效,因为之后我要为出口== 0创建一个新的data.frame并将两者相减!。
summary_means_1 = bf %>%
filter(exits == 1) %>%
summarise(
v1_1 = as.double(mean(bf$v25_grad, na.rm = TRUE)),
v2_1 = as.double(mean(bf$v29_read, na.rm = TRUE)),
v3_1 = as.double(mean(bf$v30_math, na.rm = TRUE))
)
答案 0 :(得分:0)
您可以使用plyr
软件包来完成此操作:
说这是您的数据(简体):
df <- data.frame(Dummy=sample(0:1, 10, T), V1=rnorm(10, 10), V2=rpois(10, 0.5))
此代码将计算每列的均值,并按哑元进行划分:
library(magrittr)
library(plyr)
df %>%
group_by(Dummy) %>%
summarise(Mean_V1=mean(V1, na.rm = T),
Mean_V2=mean(V2, na.rm = T))
您需要在summarise
部分为每一列添加一个新行。
使用基础R
可以将colMeans
与子集数据一起使用:
colMeans(df[df$Dummy==0, -1])
colMeans(df[df$Dummy==1, -1])
或者您可以像这样组合它们:
data.frame(Col=c("V1", "V2"),
Mean_0=colMeans(df[df$Dummy==0, -1]),
Mean_1=colMeans(df[df$Dummy==1, -1]))