簡體   English   中英

錯誤:連接列必須存在於數據中。 x `column1` 和 `column2` 的問題

[英]Error: Join columns must be present in data. x Problem with `column1` and `column2`

我收到了這個 function 的錯誤,當我用 var1-var3 更改 colum1-column3 時它可以工作,這很奇怪:

var1<-c(rep("A",4),rep("B",4))
var2<-c(rep("C",4),rep("D",4))
var3<-c(rep("E",2),rep("F",4),rep("G",2))
dataset<-data.frame(var1,var2,var3)


Rfun<-function(data,column1,column2,column3){
  data<- data %>%
    mutate(n = 1, column3 = str_c('column3_', column3)) %>% 
    complete(column1, column2, column3, fill = list(n = 0)) %>% 
    pivot_wider(names_from = column3, values_from = n, values_fn = sum) %>% 
    mutate(Total = rowSums(across(where(is.numeric)))) %>% 
    group_by(column1) %>% 
    mutate(across(starts_with('column3'), 
                  ~ case_when(. == 0 ~ '0(0%)', 
                              TRUE ~ sprintf('%d(%d%%)', .,  100 * mean(. != 0))))) %>% 
    ungroup
  
  print(data)
  
  return(data)
}

Rfun(dataset,var1,var2,var3)

這是錯誤:

在此處輸入圖像描述

考慮使用{{}}進行評估

Rfun<-function(data,column1,column2,column3){
   data %>%
    mutate(n = 1, {{column3}} := str_c('column3_', {{column3}})) %>% 
    complete({{column1}}, {{column2}}, {{column3}}, fill = list(n = 0)) %>% 
    pivot_wider(names_from = {{column3}}, values_from = n, values_fn = sum) %>% 
    mutate(Total = rowSums(across(where(is.numeric)))) %>% 
    group_by({{column1}}) %>%
    mutate(across(starts_with('column3'), 
                  ~ case_when(. == 0 ~ '0(0%)', 
                      TRUE ~ sprintf('%d(%d%%)', .,  100 * mean(. != 0)))))  %>%
    ungroup
    
  
  
}

-測試

Rfun(dataset,var1,var2,var3)
# A tibble: 4 × 6
  var1  var2  column3_E column3_F column3_G Total
  <chr> <chr> <chr>     <chr>     <chr>     <dbl>
1 A     C     2(50%)    2(50%)    0(0%)         4
2 A     D     0(0%)     0(0%)     0(0%)         0
3 B     C     0(0%)     0(0%)     0(0%)         0
4 B     D     0(0%)     2(50%)    2(50%)        4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM