r - 在不考虑顺序的情况下将一行单元格中的所有元素与另一行单元格中的所有元素进行比较
问题描述
我有一个包含 2 列的工作表A
,B
如图所示,其中的条目由逗号 ( ,
) 分隔。我想在 R 中逐个单元格比较这 2 行,使其TRUE
仅在
- 当所有条目在两行中都匹配时
- 比较时不考虑顺序(图像中的第 5 行)
图像的结果列中给出了示例预期输出。我在 R 中使用了 match 命令,但它只True
为第 2 行返回 1 ( ) 而不是第 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
这样sort(trimws(unlist(strsplit(x,","))))
的函数。
推荐阅读
- python - 检查整个 pandas 数据框中的电子邮件和电话号码
- ruby - 在 ruby 中解析多行固定宽度的文本文件
- c# - C# PropertyGrid - 如何扩展颜色选择器
- perl - 如何阻止 DBI 连接将 @localhost 添加到我的用户名?
- java - Spring boot 2.5.1 @AutoConfigureMockMvc 不加载 RouterFunctionMapping
- flutter - 在 AlertDialog 小部件顶部显示 SnackBar
- arrays - PowerShell - 如果任何条目具有某个属性值,则抓取所有同名条目
- c# - Function App 停止使用 SocketException
- garbage-collection - 始终运行的脚本上的 Python 垃圾收集
- python - ValueError:无法将字符串转换为浮点数:“个人”