有没有一种创建循环的方法,该循环将为原始的18个变量中的每个变量创建一个新变量?

时间:2019-02-10 22:31:24

标签: r

我有一个包含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))
 )

1 个答案:

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