我有4个变量的数据集,这些变量之一是虚拟陈述个人是否从某个特定的程序(退出)毕业。我需要创建一个循环,将针对每个3个变量的创建两个新的变量(意味着虚设= 1和平均虚设= 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))
)
你可以用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]))