R: filter () для цикла, проходящего через столбцы - PullRequest
0 голосов
/ 11 октября 2018

в R - попытка перебрать список имен столбцов, выполнить фильтрацию по определенной записи и подсчитать количество вхождений этой записи.Я пытаюсь выполнить что-то вроде того, что ниже, в канале внутри цикла for, чтобы сделать это, но я не могу заставить работать то, что ниже, пока я не заменил questionNumbers[i] на прямое имя столбца.

df %>%
nrow(filter(questionNumbers[i] == Response[1])) %>%
....etc

Есть идеи?У меня такое чувство, что есть apply() способ сделать это - мысли?

1 Ответ

0 голосов
/ 11 октября 2018

при условии, что у вас есть data.frame (я буду играть с mtcars) и вектор результатов (c(1,2)), который вы ищете.Следующая смесь lapply будет работать с пакетами tibble и tidyr.

responses = c(1,2)

#create a named list
exampleOutput <- lapply(setNames(names(mtcars),names(mtcars)), function(x){
  lapply(setNames(responses, paste0('response_', responses)),function(y){
    mtcars[mtcars[x] == y, x] %>%
      length
  }) %>% 
    #convert named list into a tibble/dataframe
    tibble::as.tibble()
}) %>%
  #convert list into a tibble/dataframe
  tibble::enframe() %>%
  #open up the nested data
  tidyr::unnest()

вы получите что-то вроде этого

  name  response_1 response_2
   <chr>      <int>      <int>
 1 mpg            0          0
 2 cyl            0          0
 3 disp           0          0
 4 hp             0          0
 5 drat           0          0
 6 wt             0          0
 7 qsec           0          0
 8 vs            14          0
 9 am            13          0
10 gear           0          0
11 carb           7         10
...