循环遍历数据框的特定列,保持某些列固定
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
我有一个大型数据集,前两列用作 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