r - 有没有一种方法可以创建一个循环,为原来的 18 个变量中的每一个创建一个新变量?
问题描述
我有一个包含 4 个变量的数据集,其中一个变量是一个虚拟变量,说明个人是否从特定程序毕业(退出)。我需要创建一个循环,为 3 个变量中的每一个创建两个新变量(虚拟变量的平均值 = 1,虚拟变量的平均值 = 0)。这是我的代码,我想让它更有效率,因为之后我想为 exits == 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
部分中为每一列添加一个新行。
使用 baseR
您可以使用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]))
推荐阅读
- r - 信号的所有值在它们降至最小值之前的平均值
- ios - Adobe Air - 应用程序上传错误 - 无效的可执行文件大小
- javascript - Invariant Violation:对象作为 React 子级无效(React Native)
- javascript - 我们可以从异步函数中调用非异步函数吗?
- python - VUE axios get API not found
- android - 检查 Playstore 中的内部测试人员是否已安装该应用程序
- excel - ActiveSheet.ShowAllData 在 2 台机器上返回不同的结果
- sql - 如何获取关系中所有ID的所有连续间隔
- c# - 如何将凭据分配给 WebRequest 然后导航到它?
- php - 如何在 php 7.2 中使用最新版本的 mpdf 和 codeignator