r - 如何编写一个函数来根据变量的值创建多个数据框?
问题描述
我有一个数据框,其中包含一个名为 ProgramName 的变量,其中包含不同程序的名称,但有时这些名称会发生变化。我想创建一个函数,为每个程序名称创建一个数据框。类似于子集函数的作用。
数据帧中还有其他特征也需要过滤,因此以下代码会处理这些特征
ma <- as.data.frame(Missing_AttendanceKIDS, stringsAsFactors = FALSE)
mi <- as.data.frame(Missing_AttendanceSIS, stringsAsFactors = FALSE)
mi <- mi %>% select(c("ProgramName", "FnLnDOB", "Funding", "Missing Days"))
ma$ProgramName <- as.character(ma$ProgramName)
ma <- ma[!(ma$Funder == "School Board (FL)" & ma$Issue == "non-existent"), ]
HaveFirstTermCode <- ma %>% subset(FirstTermCodeDate != "NULL")
ma <- ma[!(ma$FirstTermCodeDate != "NULL"), ]
InvalidTermCode <- ma %>% subset(Issue == "invalid term code")
ma <- ma[!(ma$Issue == "invalid term code"), ]
Blkgenerator <- ma %>% subset(ma$Issue == "non-existent" & ma$Funder != "School Board (FL)")
ma <- ma[!(ma$Issue == "non-existent" & ma$Funder != "School Board (FL)"), ]
ma$ProgramName <- as.factor(ma$ProgramName)
下面的代码是我希望该函数执行的操作。如果可能的话,还给结果数据框提供程序的名称..
Missing_Attendance_Acadiana <- subset(ma, ma$ProgramName == "Acadiana" & ma$Issue == "blank")
Missing_Attendance_Alabama <- subset(ma, ma$ProgramName == "Alabama Family Services" & ma$Issue == "blank")
Missing_Attendance_Beaufort <- ma[ma$ProgramName %like% "Beaufort" & ma$Issue == "blank", ]
Missing_Attendance_Piedmont <- ma[ma$ProgramName %like% "Piedmont" & ma$Issue == "blank", ]
获得数据框后,我正在运行以下函数以使用 R Markdown 创建包含数据框的 html。
tablemu = function(df) kable(df, row.names = FALSE, caption = "Missing Attendance") %>%
kable_styling(bootstrap_options = "striped", position = "center", full_width = T, fixed_thead = list(enabled = T, background = "Orange"), stripe_color = list(enabled = T, background = "yellow") ) %>%
column_spec(1:4, bold = T, border_left = T, border_right = T)
解决方案
只需使用split
它从因子创建一个命名的数据框列表,然后通过您需要的方法运行它lapply
。
sub <- ma[ma$Issue == "blank",]
df_list <- split(sub, sub$ProgramName)
lapply(df_list, tablemu)
或者,使用by
(object-oriented wrapper to tapply
) 来简化上述两个调用。下面将输出您的 HTML 输出的打印列表:
sub <- ma[ma$Issue == "blank",]
by(sub, sub$ProgramName, tablemu)
无需用许多变量来淹没您的全局环境。
推荐阅读
- webdriver-io - 在 webdriverIO 中的 @Wdio 中的 Allure 报告干净
- c# - Xamarin 表单提高构建和部署速度?
- php - Alexa bot 被重定向,即使它在良好的 bot 列表中
- android - 我可以检测 Fragment 是否已经创建或调用?
- scala - 使用 Source.fromUrl 的有效 url 出错
- ios - 应用程序执行屏幕旋转过渡时如何避免黑色背景区域?
- cmake - 如何让 CMake 将我的测试程序链接到 netCDF 库?
- nuxt.js - 如何使用 vee-validate 本地化 Nuxt 的表单验证错误消息
- android - angular js 2.17 版的所有 mobiscroll 组件在 Android 10 上停止工作
- python - 如何使用 tensorflow 进行文本分类?