R:查看两个简单字符串的唯一元素时出现奇怪的结果

lar*_*y77 4 string r vector unique

我对所看到的感到非常困惑。\n我读了一个 Excel 文件,当我查看一列字符串中的唯一值时,我不明白结果。

\n

我可以在一个最小的表示中重现这一点(见下文):为什么 dd 有两个独特的元素,而 dd2 只有一个?

\n

任何建议表示赞赏。

\n
dd <- c("\xef\xbb\xbfGrant", "Grant")\n\n\ndd2 <- c("Grant", "Grant")\n\nunique(dd)\n#> [1] "\xef\xbb\xbfGrant" "Grant"\nlength(unique(dd))\n#> [1] 2\n\nunique(dd2)\n#> [1] "Grant"\nlength(unique(dd2))\n#> [1] 1\n\nsessionInfo()\n#> R version 4.1.1 (2021-08-10)\n#> Platform: x86_64-pc-linux-gnu (64-bit)\n#> Running under: Debian GNU/Linux 11 (bullseye)\n#> \n#> Matrix products: default\n#> BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0\n#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0\n#> \n#> locale:\n#>  [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              \n#>  [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    \n#>  [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   \n#>  [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C                 \n#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            \n#> [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       \n#> \n#> attached base packages:\n#> [1] stats     graphics  grDevices utils     datasets  methods   base     \n#> \n#> loaded via a namespace (and not attached):\n#>  [1] knitr_1.33        magrittr_2.0.1    rlang_0.4.11      fansi_0.5.0      \n#>  [5] stringr_1.4.0     styler_1.5.1      highr_0.9         tools_4.1.1      \n#>  [9] xfun_0.25         utf8_1.2.2        withr_2.4.2       htmltools_0.5.1.1\n#> [13] ellipsis_0.3.2    yaml_2.2.1        digest_0.6.27     tibble_3.1.3     \n#> [17] lifecycle_1.0.0   crayon_1.4.1      purrr_0.3.4       vctrs_0.3.8      \n#> [21] fs_1.5.0          glue_1.4.2        evaluate_0.14     rmarkdown_2.10   \n#> [25] reprex_2.0.1      stringi_1.7.3     compiler_4.1.1    pillar_1.6.2     \n#> [29] backports_1.2.1   pkgconfig_2.0.3\n
Run Code Online (Sandbox Code Playgroud)\n

由reprex 包于 2021-09-13 创建(v2.0.1)

\n

akr*_*run 5

原始值似乎不同,可能来自复制

sapply(dd, charToRaw)
$`Grant`
[1] ef bb bf 47 72 61 6e 74

$Grant
[1] 47 72 61 6e 74
Run Code Online (Sandbox Code Playgroud)

而与dd2,它是相同的

sapply(dd2, charToRaw)
     Grant Grant
[1,]    47    47
[2,]    72    72
[3,]    61    61
[4,]    6e    6e
[5,]    74    74
Run Code Online (Sandbox Code Playgroud)

第一种情况似乎有一个额外的字符

nchar(dd)
[1] 6 5
Run Code Online (Sandbox Code Playgroud)

如果我们删除第一个字符,unique将是 1

unique(c(substring(dd[1],2), dd[2]))
[1] "Grant"
Run Code Online (Sandbox Code Playgroud)

  • `trimws` 碰巧也删除了领先的“东西”。 (2认同)