我有一个大数据框,其中包含两列,其中包含字符串。当这些列不相等时,我要执行操作。
问题在于,当我使用简单的!=
运算符时,它给出的结果不正确。即显然,'Tout_Inclus'
和'Tout_Inclus'
是不相等的。
这使我可以使用字符串比较功能,例如pracma软件包中的strcmp
。但是,这不是向量化的-我的数据框有960万行,因此,我认为如果循环遍历,这将导致崩溃/老化。
有人有矢量化的方法来比较字符串吗?
我的数据框如下:
City_Break City_Break
City_Break City_Break
Court_Break Court_Break
Petit_Budget Petit_Budget
Pas_Cher Pas_Cher
Deals Deals_Pas_Chers
Vacances Vacances_Éco
Hôtel_Vol Hôtel_Vol
Dernière_Minute Dernière_Minute
Formule Formule_Éco
Court_Séjour Court_Séjour
Voyage Voyage_Pas_Cher
Séjour Séjour_Pas_Cher
Congés Congés_Éco
当我执行类似df[colA != colB,]
的操作时,它给出错误的结果,即字符串(通过查看它们)相等。
我确保编码为UTF-8
,字符串不是影响因素,并且我还尝试在进行比较之前删除特殊字符。
顺便说一下,这些字符串来自多种语言。
编辑:我已经修剪了空格,但仍然没有运气
答案 0 :(得分:1)
尝试从两列中删除前导/后缀空格,然后进行比较:
df[trimws(df$colA, "both") != trimws(df$colB, "both"), ]
答案 1 :(得分:0)
如果一切都很好(修剪等),则可能是编码问题。在UTF-8中,相同的重音字符可以用不同的字节序列表示。它可以是单字节编码的,也可以带有修饰符字节。但是,对于“ Tout_Inclus”非常奇怪。
只是要检查一下,请从 stringi 包尝试以下操作:
stringi::stri_compare(df$colA,df$colB, "fr_FR")
输出是什么?