【问题标题】:R- grepl not matching characters when characters are present in R. (UTF- 8 encoding)当 R 中存在字符时,R- grepl 不匹配字符。(UTF-8 编码)
【发布时间】:2019-07-24 16:39:31
【问题描述】:

我目前正在处理 UTF-8 编码的数据。我正在尝试应用grepl 来查看文本正文中是否存在某些字符串。但无济于事,我无法得到我想要的结果。 (注意:我确实知道该字符串存在)。

举个例子,我有以下整数串:

(注意: 尽管是数字,但数据的结构是单个字符串)

>tancd[[1]]
[1] "1512 1463 1489 1460 1468 1497 32 1488 1457 1500 1460 1497 1506 1462 1494 1462 1512"

我想看看上面的字符串是否存在于下面的字符串中(它是):

[注意:所需的字符串用***框起来-它不在实际数据中]

> dat
[1] "1488 32 1502 1461 1488 1461 1497 1502 1464 1514 1463 1497 32 1511 1493 1465 1512 1460 1497 1503 32 1488 1462 1514 32 1513 1473 1456 1502 1463 1506 32 1489 1468 1456 1506 1463 1512 1456 1489 1460 1497 1514 46 32 1502 1460 1513 1468 1473 1464 1506 1464 1492 32 1513 1473 1462 1492 1463 1499 1468 1465 1492 1458 1504 1460 1497 1501 32 1504 1460 1499 1456 1504 1464 1505 1460 1497 1501 32 1500 1462 1488 1457 1499 1465 1500 32 1489 1468 1460 1514 1456 1512 1493 1468 1502 1464 1514 1464 1503 44 32 1506 1463 1491 32 1505 1493 1465 1507 32 1492 1464 1488 1463 1513 1473 1456 1502 1493 1468 1512 1464 1492 32 1492 1464 1512 1460 1488 1513 1473 1493 1465 1504 1464 1492 44 32 1491 1468 1460 1489 1456 1512 1461 1497 32 ***1512 1463 1489 1468 1460 1497 32 1488 1457 1500 1460 1497 1506 1462 1494 1462 1512*** 46 32 1493 1463 1495 1458 1499 1464 1502 1460 1497 1501 32 1488 1493 1465 1502 1456 1512 1460 1497 1501 44 32 1506 1463 1491 32 1495 1458 1510 1493 1465 1514 46 32 1512 1463 1489 1468 1464 1503 32 1490 1468 1463 1502 1456 1500 1460 1497 1488 1461 1500 32 1488 1493 1465 1502 1461 1512 44 32 1506 1463 1491 32 1513 1473 1462 1497 1468 1463 1506 1458 1500 1462 1492 32 1506 1463 1502 1468 1493 1468 1491 32 1492 1463 1513 1468 1473 1464 1495 1463 1512 46 32 1502 1463 1506 1458 1513 1474 1462 1492 32 1513 1473 1462 1489 1468 1464 1488 1493 1468 32 1489 1464 1504 1464 1497 1493 32 1502 1460 1489 1468 1461 1497 1514 32 1492 1463 1502 1468 1460 1513 1473 1456 1514 1468 1462 1492 44 32 1488 1464 1502 1456 1512 1493 1468 32 1500 1493 1465 44 32 1500 1465 1488 32 1511 1464 1512 1460 1497 1504 1493 1468 32 1488 1462 1514 32 1513 1473 1456 1502 1463 1506 46 32 1488 1464 1502 1463 1512 32 1500 1464 1492 1462 1501 44 32 1488 1460 1501 32 1500 1465 1488 32 1506 1464 1500 1464 1492 32 1506 1463 1502 1468 1493 1468 1491 32 1492 1463 1513 1468 1473 1463 1495 1463 1512 44 32 1495 1463 1497 1468 1464 1489 1460 1497 1503 32 1488 1463 1514 1468 1462 1501 32 1500 1460 1511 1456 1512 1493 1465 1514 46 32 1493 1456 1500 1465 1488 32 1494 1493 1465 32 1489 1468 1460 1500 1456 1489 1463 1491 44 32 1488 1462 1500 1468 1464 1488 32 1499 1468 1464 1500 32 1502 1463 1492 32 1513 1468 1473 1462 1488 1464 1502 1456 1512 1493 1468 32 1495 1458 1499 1464 1502 1460 1497 1501 32 1506 1463 1491 32 1495 1458 1510 1493 1465 1514 44 32 1502 1460 1510 1456 1493 1464 1514 1464 1503 32 1506 1463 1491 32 1513 1473 1462 1497 1468 1463 1506 1458 1500 1462 1492 32 1506 1463 1502 1468 1493 1468 1491 32 1492 1463 1513 1468 1473 1464 1495 1463 1512 46 32 1492 1462 1511 1456 1496 1461 1512 32 1495 1458 1500 1464 1489 1460 1497 1501 32 1493 1456 1488 1461 1489 1464 1512 1460 1497 1501 44 32 1502 1460 1510 1456 1493 1464 1514 1464 1503 32 1506 1463 1491 32 1513 1473 1462 1497 1468 1463 1506 1458 1500 1462 1492 32 1506 1463 1502 1468 1493 1468 1491 32 1492 1463 1513 1468 1473 1464 1495 1463 1512 46 32 1493 1456 1499 1464 1500 32 1492 1463 1504 1468 1462 1488 1457 1499 1464 1500 1460 1497 1501 32 1500 1456 1497 1493 1465 1501 32 1488 1462 1495 1464 1491 44 32 1502 1460 1510 1456 1493 1464 1514 1464 1503 32 1506 1463 1491 32 1513 1473 1462 1497 1468 1463 1506 1458 1500 1462 1492 32 1506 1463 1502 1468 1493 1468 1491 32 1492 1463 1513 1468 1473 1464 1495 1463 1512 46 32 1488 1460 1501 32 1499 1468 1461 1503 44 32 1500 1464 1502 1468 1464 1492 32 1488 1464 1502 1456 1512 1493 1468 32 1495 1458 1499 1464 1502 1460 1497 1501 32 1506 1463 1491 32 1495 1458 1510 1493 1465 1514 44 32 1499 1468 1456 1491 1461 1497 32 1500 1456 1492 1463 1512 1456 1495 1460 1497 1511 32 1488 1462 1514 32 1492 1464 1488 1464 1491 1464 1501 32 1502 1460 1503 32 1492 1464 1506 1458 1489 1461 1512 1464 1492 58"

我的问题:

当我使用grepl 时,我得到以下结果:

> grepl(tancd[[1]],dat)
[1] FALSE

同样,如果我使用 stringr 包中的 string_detect(),我会得到相同的结果:

> str_detect(tancd[[1]],dat)
[1] FALSE

有没有办法grepl这个集合并得到正确想要的结果?

【问题讨论】:

  • 我可能是错的,但我无法在 dat 中找到 tancd[[1]] 模式,我使用 ctrl+F 来做到这一点。不知道为什么你期待一个 TRUE。字符串 "1512 1463 1489..." 后面的 1468 和 1460 的位置不同,谢谢。 Also use fixed = TRUE, when you want to ignore regex in grep

标签: r string stringr non-ascii-characters


【解决方案1】:

星号之间的字符串与您要查找的字符串不同。

string in dat    :  "1512 1463 1489 1468 1460 1497 32 1488 1457 1500 1460 1497 1506 1462 1494 1462 1512"
string in tancd  :  "1512 1463 1489 1460 1468 1497 32 1488 1457 1500 1460 1497 1506 1462 1494 1462 1512"

您会注意到 1468 和 1460 在 tancd 中倒置。如果你修复 tancd 它应该可以工作。

tancd[[1]] <- "1512 1463 1489 1468 1460 1497 32 1488 1457 1500 1460 1497 1506 1462 1494 1462 1512"

grepl(dat, pattern=tancd[[1]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 2022-01-17
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2013-01-21
    • 2018-01-16
    相关资源
    最近更新 更多