Как написать функцию для создания нескольких фреймов данных на основе значений переменной? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть фрейм данных, который содержит переменную с именем 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", ]

После того, как я получил фреймы данных, я запускаю следующую функцию, чтобы создать html с фреймом данных в нем с помощью R Markdown.

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)

1 Ответ

0 голосов
/ 25 июня 2019

Просто используйте split, который создает именованный список фреймов данных из фактора (ов), а затем выполните его с помощью необходимого метода с помощью lapply.

sub <- ma[ma$Issue == "blank",]
df_list <- split(sub, sub$ProgramName)

lapply(df_list, tablemu)

В качестве альтернативы используйте by(объектно-ориентированная оболочка tapply) для упрощения двух вышеупомянутых вызовов.Ниже будет выведен распечатанный список ваших HTML-выводов:

sub <- ma[ma$Issue == "blank",]
by(sub, sub$ProgramName, tablemu)

Нет необходимости заполнять вашу глобальную среду множеством переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...