首页 > 解决方案 > 在不考虑顺序的情况下将一行单元格中的所有元素与另一行单元格中的所有元素进行比较

问题描述

我有一个包含 2 列的工作表AB如图所示,其中的条目由逗号 ( ,) 分隔。我想在 R 中逐个单元格比较这 2 行,使其TRUE仅在

  1. 当所有条目在两行中都匹配时
  2. 比较时不考虑顺序(图像中的第 5 行)

图像的结果列中给出了示例预期输出。我在 R 中使用了 match 命令,但它只True为第 2 行返回 1 ( ) 而不是第 5 行,第 5 行具有相同的条目但顺序不同。

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

在此处输入图像描述

标签: rexcelcomparisonmatchrstudio

解决方案


这应该有助于:

# 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这样sort(trimws(unlist(strsplit(x,","))))的函数。


推荐阅读