R 用case\u-when语句改变_-at

R 用case\u-when语句改变_-at,r,dplyr,conditional-statements,R,Dplyr,Conditional Statements,我试图创建一个数据框,其中字段是两个分组变量,以及大量度量的平均值、下限和上限置信区间,如下所述: 下面是我正在使用的数据集的一个reprex(真正的数据集有更多的结果和行): 我使用的代码是: lci <- function(data) { as.numeric(ci(data)[2]) } uci <- function(data) { as.numeric(ci(data)[3]) } data_agg <- data %>% gr

我试图创建一个数据框,其中字段是两个分组变量,以及大量度量的平均值、下限和上限置信区间,如下所述:

下面是我正在使用的数据集的一个reprex(真正的数据集有更多的结果和行):

我使用的代码是:

 lci <- function(data) {
  as.numeric(ci(data)[2])
}

uci <- function(data) {
  as.numeric(ci(data)[3])
}   

data_agg <- data %>%
      group_by(var1, var2) %>%
      summarise_if(is.numeric, funs(mean, lci, uci)) %>%
      select(var1, var2, sort(current_vars())) #sorts into lci, mean, uci for each outcome var

有更多使用作用域函数经验的人能告诉我我做错了什么以及我应该做什么吗?

请展示一个小的可重复的例子,看起来你需要
~
案例前面,
(mutate需要一个函数或公式,添加
~
将生成一个公式)@IceCreamToucan谢谢,现在可以了!
 lci <- function(data) {
  as.numeric(ci(data)[2])
}

uci <- function(data) {
  as.numeric(ci(data)[3])
}   

data_agg <- data %>%
      group_by(var1, var2) %>%
      summarise_if(is.numeric, funs(mean, lci, uci)) %>%
      select(var1, var2, sort(current_vars())) #sorts into lci, mean, uci for each outcome var
# A tibble: 7 x 17
# Groups:   var1 [7]
  var1   var2 outcome1_lci outcome1_mean outcome1_uci outcome2_lci outcome2_mean outcome2_uci outcome3_lci outcome3_mean
  <chr> <int>        <dbl>         <dbl>        <dbl>        <dbl>         <dbl>        <dbl>        <dbl>         <dbl>
1 0000~   214         0             0            0          0              0            0            0             0    
2 0001~   214        -1.71          7.4         16.5       -0.0851         0.553        1.19        -0.120         0.9  
3 0001~   214        -3.82          1.75         7.32      -0.477          0.219        0.915       -0.818         0.375
4 0001~   214        -2.73          1.25         5.23      -0.390          0.179        0.747       -0.818         0.375
5 0010~   214       NaN             0          NaN        NaN              0          NaN          NaN             0    
6 0021~   215        -4.97          2.8         10.6       -0.262          0.147        0.557       -1.07          0.6  
7 0022~   215         0             0            0          0              0            0            0             0    
# ... with 7 more variables: outcome3_uci <dbl>, outcome4_lci <dbl>, outcome4_mean <dbl>, outcome4_uci <dbl>,
#   outcome5_lci <dbl>, outcome5_mean <dbl>, outcome5_uci <dbl>
   data_agg <- data %>%
      group_by(var1, var2) %>%
      summarise_if(is.numeric, funs(mean, lci, uci)) %>%
      mutate_at(vars(contains("lci")), case_when(.<0 ~ 0, TRUE ~ .)) %>%
      select(var1, var2, sort(current_vars()))  #sorts into lci, mean, uci for each outcome var 
Error: `TRUE ~ (.)` must be length 119 or one, not 17