Записать цикл для выполнения функции через имена столбцов - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть набор данных с количественным столбцом, для которого я хочу рассчитать среднее значение по группам.Другие столбцы в наборе данных называются [FY2001, FY2002, ..., FY2018].Эти столбцы заполнены либо 1, либо 0.

Я хочу рассчитать среднее значение первого столбца для каждого из столбцов FY, когда они равны 1. Итак, я хочу 18 различных средних.

Я привык использовать макросы в SAS, где я могу заменять части имени набора данных или имени столбца с помощью оператора let.Это моя попытка написать цикл в R для решения этой проблемы:

vector = c("01","02","03","04","05","06","07","08","09","10",
         "11","12","13","14","15","16","17","18")
varlist = paste("FY20", vector, sep = "")

abc = for (i in length(varlist)){
    table(ALL_FY2$paste(varlist)[i])
}
abc

Это не работает, так как обрабатывает функцию вставки как столбец.Что мне не хватает?Любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 сентября 2018

Мы можем использовать [[ вместо & для подмножества столбца.Кроме того, 'abc' должен быть list, которому присваивается соответствующий table вывод каждого столбца в цикле for.

abc <- vector("list", length(varlist)) # initialize a `list` object

Перебрать последовательность «varlist» иа не length(varlist) (это одно число)

for(i in seq_along(varlist)) abc[[i]] <- table(ALL_FY2[[varlist[i]]])

Однако, если нам нужен один table вывод из всех столбцов, упомянутых в 'varlist', unlist столбцы vector и rep разрешают последовательность столбцов перед применением table

ind <- rep(seq_along(varlist), each = nrow(ALL_FY2))
table(ind, unlist(ALL_FY2[varlist]))
...