Попытка перебрать столбцы, чтобы создать таблицу для каждого - PullRequest
0 голосов
/ 18 июня 2019

У меня есть таблица с 10 столбцами. Столбцы имеют следующие названия: «Месяц», «Год», «Консультирование», «Встреча», «Еда», «Печать», «Расходные материалы», «Обучение», «Библиотека ссуды», «Другое»

Я хочу пройтись по каждой колонке причины и создать таблицу с разбивкой по месяцам по Y и году по X, а также сумму для этой категории причин.

Я попытался создать цикл for и использовать семейство функций sapply / lapply. Однако я не могу пройти мимо «Советов». Но если я запускаю свою функцию в каждом отдельном столбце, она работает.

# Sample Data
AttendanceTab <- data.frame(Month = c("Oct", "Nov", "Oct", "Jan", "Feb", 
                                      "Mar", "May", "Oct"), 
                            Year = c( 2018, 2017, 2017, 2019, 2018, 2019, 
                                      2018, 2017), 
                            Advising = c(1, 1, 1, 0, 0, 1, 0, 0), 
                            Hang.Out = c(0, 0, 1, 0, 1, 1, 1, 0),
                            Food = c(1, 1, 1, 0, 0, 1, 1, 1)) 
attendance_summary <- function(ReasonName, FUN = sum) {
                    tapply(AttendanceTab[, ReasonName], 
                    AttendanceTab[,1:2], sum)
} 
attendance_summary("Advising") 
attendance_summary("Hang.Out")
attendance_summary("Food")
attendance_summary("Printing")
attendance_summary("Supplies")
attendance_summary("Studying")
attendance_summary("Lending.Library")
attendance_summary("Other") 
Complexes <- dim(AttendanceTab)[2]

reasons <- as.character(c("Advising", "Hang Out", "Food", 
          "Printing", "Supplies", "Studying", "Lending Library", 
          "Other"))
for(i in 1:Complexes) {
                    RR <- reasons[[i]]
                    ADSum <- attendance_summary(RR)
                    print(ADSum)
}
sapply(AttendanceTab, attendance_summary)
 #Also tried
sapply(reasons, attendance_summary)

например, причины [[1]] работают и дают соответствующую таблицу, но когда она переходит ко второму элементу причины, она возвращает:

Ошибка в [.data.frame (посещаемость2, ReasonName): выбраны неопределенные столбцы

1 Ответ

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

У вас есть опечатка при определении reasons. В AttendanceTab у вас есть столбец Hang.Out, а в reasons вы называете его Hang Out - space вместо .. Чтобы избежать этого, вы можете использовать

reasons <- names(AttendanceTab)[-c(1:2)]
Complexes <- length(reasons)
...