Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在不考虑顺序的情况下,将一行单元格中的所有元素与另一行单元格中的所有元素进行比较_R_Excel_Comparison_Match_Rstudio - Fatal编程技术网

R 在不考虑顺序的情况下,将一行单元格中的所有元素与另一行单元格中的所有元素进行比较

R 在不考虑顺序的情况下,将一行单元格中的所有元素与另一行单元格中的所有元素进行比较,r,excel,comparison,match,rstudio,R,Excel,Comparison,Match,Rstudio,我有一个工作表,有两列a和B,如图所示,它们的条目用逗号分隔(,)。 我想在R中逐单元格比较这两行,这样它只在以下情况下返回1(TRUE) 当两行中的所有条目都匹配时 比较时不考虑顺序(图中第5行) 图像的结果列中给出了预期输出的示例。 我在R中使用了match命令,但它只为第2行返回1(True),而不是第5行,第5行的条目相同,但顺序不同 有人能推荐R中的任何包或函数来帮助我做到这一点(最好是没有循环的解决方案),因为我想在有数千行的数据集上使用它 这应该有助于: # example dat

我有一个工作表,有两列
a
B
,如图所示,它们的条目用逗号分隔(
)。 我想在R中逐单元格比较这两行,这样它只在以下情况下返回1(
TRUE

  • 当两行中的所有条目都匹配时
  • 比较时不考虑顺序(图中第5行)
  • 图像的结果列中给出了预期输出的示例。 我在R中使用了match命令,但它只为第2行返回1(
    True
    ),而不是第5行,第5行的条目相同,但顺序不同

    有人能推荐R中的任何包或函数来帮助我做到这一点(最好是没有循环的解决方案),因为我想在有数千行的数据集上使用它

    这应该有助于:

    # example data
    dt = data.frame(A = c("1,ab", "1,x,df"),
                    B = c("2,ab", "1,df,x"),
                    stringsAsFactors = F)
    
    # vectorised function to check matches
    ff = function(x,y) as.numeric(identical(sort(unlist(strsplit(x,","))), 
                                            sort(unlist(strsplit(y,",")))))
    ff = Vectorize(ff)
    
    # apply function
    dt$Result = ff(dt$A, dt$B)
    
    dt
    
    #        A      B Result
    # 1   1,ab   2,ab      0
    # 2 1,x,df 1,df,x      1
    

    如果逗号后可能有一些空格,可以使用函数
    trimws
    ,如上面函数中的
    排序(trimws(unlist(strsplit(x,“,”))

    这里有一个
    tidyverse

    library(tidyverse)
    rownames_to_column(dt, 'rn') %>%
      separate_rows(A, B) %>% 
      group_by(rn) %>% 
      summarise(Result = as.integer(all(sort(A) == sort(B)))) %>% 
      select(Result) %>% 
      bind_cols(dt, .)
    
    数据
    dt请使用
    dput()
    添加数据。
    dt <- structure(list(A = c("1,ab", "1,x,df"), B = c("2,ab", "1,df,x"
    )), class = "data.frame", row.names = c(NA, -2L))