Создать формулу внутри l oop над именами столбцов - PullRequest
1 голос
/ 31 января 2020

Я хотел бы l oop через столбцы в наборе данных и использовать имя столбца для агрегирования набора данных. Тем не менее, я получаю сообщение об ошибке, когда я пытаюсь ввести имя столбца в статистическую функцию:

"Ошибка в model.frame.default (формула = cbind (SurveyID) ~ Панель + Категория +: переменная длина dif (найдено для 'i') "

Как только я смогу сохранить этот временный файл, я добавлю временный файл в постоянный набор данных, однако я не смогу пройти эту часть. Любая помощь так цениться!

#example of my data:
    df <- data.frame("SurveyID" = c('A','B','C','D'), "Panel" = c('E','E','S','S'), "Category" = c(1,1,2,3), "ENG" = c(3,3,1,2), "PAR"
    = c(3,1,1,2), "REL" = c(3,1,1,2), "CLC"= c(3,1,1,2))

#for loop to get column name to include as part of the aggregate function
    for (i in colnames(df[4:7])) {
      print (i)
     temp <-  data.frame(setNames(aggregate(cbind(SurveyID) ~ Panel + Category + i, data = df, FUN = length), c("Panel","GENDER", "Favlev", "Cnt")))       
}

1 Ответ

1 голос
/ 01 февраля 2020

Вы делаете одну ошибку newb ie и еще одну сложную ошибку:

Ошибка newb: не удается проиндексировать последовательные элементы при присваивании, т. Е. Перезаписывать более ранние значения новыми значениями.

Не такая уж новая ошибка. Неправильное построение объектов формулы. Нужно as.formula

temp=list()   # need empty list with a name
for (i in colnames(df[4:7])) {
     print (i); form <- as.formula( paste( "SurveyID ~ Panel + Category +", i) )
     temp[[i]] <-  data.frame(setNames(aggregate(form, data = df, FUN = length), c("Panel","GENDER", "Favlev", "Cnt")))       
 }
#Output
[1] "ENG"
[1] "PAR"
[1] "REL"
[1] "CLC"

 str(temp)
#----------------
List of 4
 $ ENG:'data.frame':    3 obs. of  4 variables:
  ..$ Panel : Factor w/ 2 levels "E","S": 2 2 1
  ..$ GENDER: num [1:3] 2 3 1
  ..$ Favlev: num [1:3] 1 2 3
  ..$ Cnt   : int [1:3] 1 1 2
 $ PAR:'data.frame':    4 obs. of  4 variables:
  ..$ Panel : Factor w/ 2 levels "E","S": 1 2 2 1
  ..$ GENDER: num [1:4] 1 2 3 1
  ..$ Favlev: num [1:4] 1 1 2 3
  ..$ Cnt   : int [1:4] 1 1 1 1
 $ REL:'data.frame':    4 obs. of  4 variables:
  ..$ Panel : Factor w/ 2 levels "E","S": 1 2 2 1
  ..$ GENDER: num [1:4] 1 2 3 1
  ..$ Favlev: num [1:4] 1 1 2 3
  ..$ Cnt   : int [1:4] 1 1 1 1
 $ CLC:'data.frame':    4 obs. of  4 variables:
  ..$ Panel : Factor w/ 2 levels "E","S": 1 2 2 1
  ..$ GENDER: num [1:4] 1 2 3 1
  ..$ Favlev: num [1:4] 1 1 2 3
  ..$ Cnt   : int [1:4] 1 1 1 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...