在 tidyverse 中循环

Loop in tidyverse

我正在学习 tidyverse(),我正在使用时间序列数据集,我选择了以 sec 开头的列。我基本上想从等于 123 的列中识别出那些值,保留这些值并将其余值替换为 0。但我不知道如何从 sec1:sec4 开始循环。另外我怎样才能 sum() 每列?

df1<-df %>% 
  select(starts_with("sec")) %>% 
  select(ifelse("sec1:sec4"==123, 1, 0))
  

示例数据:

structure(list(sec1 = c(1, 123, 1), sec2 = c(123, 1, 1), sec3 = c(123, 
0, 0), sec4 = c(1, 123, 1)), spec = structure(list(cols = list(
    sec1 = structure(list(), class = c("collector_double", "collector"
    )), sec2 = structure(list(), class = c("collector_double", 
    "collector")), sec3 = structure(list(), class = c("collector_double", 
    "collector")), sec4 = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), delim = ","), class = "col_spec"),  row.names = c(NA, 
-3L), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))

我认为您必须使用 mutate 和 across 来完成此操作。在下面,您将在以 sec 开头的每一列中进行变异,然后保留所有 123 的值并将所有其他值替换为 0.

 df1<-df %>% 
        select(starts_with("sec")) %>% 
        mutate(across(starts_with("sec"),.fns = function(x){ifelse(x == 123,x,0)}))