错误:连接列必须存在于数据中。 x `column1` 和 `column2` 的问题

Posted

技术标签:

【中文标题】错误:连接列必须存在于数据中。 x `column1` 和 `column2` 的问题【英文标题】:Error: Join columns must be present in data. x Problem with `column1` and `column2` 【发布时间】:2022-01-11 18:34:01 【问题描述】:

这个函数出错了,当我用 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 %>%dplyr::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
  
  
library(vcdExtra)

   test<-CMHtest(table(data$column2, data$column3, data$column1),overall=TRUE)
   list<-c(data_,test)
   return(list)


Rfun(dataset,var1,var2,var3)

这是错误:

【问题讨论】:

您的问题是Rfun() 中的complete(column1, column2, column3, fill = list(n = 0)) 行。此时函数中,data 还没有任何名为column1column2 的列;而column3 是在上面定义的:mutate(..., column3 = ...)。如果您希望complete()column1 视为data 中的var1 变量,那么您需要使用语法column1,因为@akrun 建议here。 这将捕获符号 var1,作为参数传递给调用Rfun(dataset, column1 = var1, ...)中的column1参数;它会将complete(column1, ...) 行替换为complete(var1, ...) 【参考方案1】:

考虑使用 进行评估

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

【讨论】:

谢谢 :) 当我在函数“CMH”测试中集成并且我想打印它时它不起作用的另一件事:test @Ruser-lab9 CMH 是什么?如果您在另一个函数中使用此函数。可能您需要!! 参数,即Rfun(dataset, !!var1, !!var2, !!var3) 我不知道你是如何在CMHtest内部传递Rfun的 我将对上面的帖子进行编辑,包括 CMHtest() 函数 @Ruser-lab9 谢谢,请做

以上是关于错误:连接列必须存在于数据中。 x `column1` 和 `column2` 的问题的主要内容,如果未能解决你的问题,请参考以下文章

一个表上具有不同列的 SQL 连接

Tensorflow 1.x 的 feature_columns 项必须是 _FeatureColumn。给定类型是列表

Laravel 验证:存在附加列条件 - 自定义验证规则

ValueError:`class_weight`必须包含数据中的所有类。类{1,2,3}存在于数据中,但不存在于`class_weight`中

使用公共列映射两个数据框

Pyspark:检查数据框中是不是存在列[重复]