R:for循环中各列的filter()

时间:2018-10-11 17:51:59

标签: r filter apply tidyverse

R中的

-尝试遍历列名列表,按特定条目过滤并计算该条目的出现次数。我正在尝试在for循环中的管道中运行类似于下面的内容,但是除非使用questionNumbers[i]替换直接的列名,否则我无法获得下面的内容。

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

有什么想法吗?我觉得有一种apply()的方式可以做到-有想法吗?

1 个答案:

答案 0 :(得分:0)

,因此,假设您有一个data.frame(我将和mtcars一起玩)和要寻找的结果向量(c(1,2))。 lapply的以下混合物将与tibbletidyr软件包一起使用。

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