循环遍历数据框的特定列,保持某些列固定

Loop through specific columns of dataframe keeping some columns as fixed

我有一个大型数据集,前两列用作 ID(一个是 ID,另一个是年份变量)。我想按组计算一个计数并遍历每个不是 ID 的变量。下面的代码显示了我想为一个变量实现的目标:

library(tidyverse)

df <- tibble(
  ID1 = c(rep("a", 10), rep("b", 10)),
  year = c(2001:2020),
  var1 = rnorm(20),
  var2 = rnorm(20))

df %>%
  select(ID1, year, var1) %>%
  filter(if_any(starts_with("var"), ~!is.na(.))) %>%
  group_by(year) %>%
  count() %>%
  print(n = Inf)

我不能使用以 for(i in names(df)) 开头的循环,因为我想保留变量“ID1”和“year”。我怎样才能 运行 这段代码用于所有以“var”开头的列?我尝试使用 quosures 但它不起作用,因为我收到错误 select() doesn't handle lists。我也尝试使用 select(starts_with("var") 但没有成功。 非常感谢!

for(i in names(df)[grepl('var',names(df))])

另一个可能的解决方案:

library(tidyverse)

df %>% 
  group_by(ID1) %>% 
  summarise(across(starts_with("var"), ~ length(na.omit(.x))))

#> # A tibble: 2 × 3
#>   ID1    var1  var2
#>   <chr> <int> <int>
#> 1 a        10    10
#> 2 b        10    10