【问题标题】:R code to change a column name containing a symbol not executed when sourcedR代码更改包含在获取时未执行的符号的列名
【发布时间】:2016-04-13 10:21:54
【问题描述】:

我有一个数据集,其中包含列名 blactamases。在 .csv 文件中,名称的“beta”部分作为一个被误解的符号导入到 R 中(看起来像一个 I,旁边有一个方形符号)。

由于我定期导入此文件,我有一个源文件来执行一些基本的数据清理并准备数据集以进行分析。我包含了一行代码来将列名转换为更用户友好的名称,见下文:

colnames(df)[which(names(df) == "î²lactamases")] <- "blactamases"

如果我自己运行这行代码,这运行良好。但是,当我尝试运行源文件时,它在这一行失败。没有产生错误,我知道它失败的唯一原因是因为列名没有更改,并且引用修改后的列名的后续操作不起作用。

更奇怪的是,源文件中这一行下面的行使用完全相同的过程来更改另一个列名,并且在获取时运行良好:

colnames(df)[which(names(df) == "eae1")] <- "eaeseq"

任何想法都将不胜感激 - 我需要在 î² 之前添加一些内容以使其从源代码正确运行吗?

我正在使用 R Studio 0.99.489 和 R 版本 3.2.3。

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252    LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                            LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] digest_0.6.8        foreign_0.8-66      xlsx_0.5.7          xlsxjars_0.6.1      rJava_0.9-7         SnowballC_0.5.1    
 [7] wordcloud_2.5       RColorBrewer_1.1-2  tm_0.6-2            NLP_0.1-8           rsatscan_0.3.9200   surveillance_1.10-0
[13] polyCub_0.5-2       xtable_1.8-0        epitools_0.5-7      ggmap_2.5.2         ggplot2_1.0.1       geosphere_1.4-3    
[19] rgdal_1.1-1         sp_1.2-1            MRAtools_0.6.6      zoo_1.7-12          stringi_1.0-1       stringdist_0.9.4   
[25] reshape2_1.4.1      dplyr_0.4.3         plyr_1.8.3          data.table_1.9.6    readxl_0.1.0        RPostgreSQL_0.4    
[31] DBI_0.3.1           RODBCext_0.2.5      RODBC_1.3-12       

loaded via a namespace (and not attached):
 [1] slam_0.1-32         lattice_0.20-33     colorspace_1.2-6    mgcv_1.8-10         chron_2.3-47        spatstat_1.43-0    
 [7] jpeg_0.1-8          stringr_1.0.0       munsell_0.4.2       gtable_0.1.2        RgoogleMaps_1.2.0.7 mapproj_1.2-4      
[13] parallel_3.2.3      proto_0.3-10        Rcpp_0.12.2         tensor_1.5          scales_0.3.0        abind_1.4-3        
[19] deldir_0.1-9        rjson_0.2.15        png_0.1-7           RJSONIO_1.3-0       polyclip_1.3-2      grid_3.2.3         
[25] tools_3.2.3         magrittr_1.5        maps_3.0.1          goftest_1.0-3       MASS_7.3-45         Matrix_1.2-3       
[31] assertthat_0.1      R6_2.1.1            nlme_3.1-122

【问题讨论】:

  • 可能与您使用的编码有关,在 RStudio 中,文件下有一个选项,使用编码重新打开,也许可以尝试使用其中的一些,看看它是否有效
  • 您能否尝试read.csv(..., encoding = "Windows-1252") 并再次使用“latin1”,最后使用“UTF-8”,看看是否有任何解决问题?我对法裔加拿大人有类似的问题。我在我的笔记本里放了一些处理它的策略:bertelsen.ca/invalid-multibyte-string
  • 谢谢 - 我尝试了所有 3 和 UTF-8 将其正确编码为 beta 标志。我还按照@RyanCastner 的建议选择了 UTF-8 对脚本进行编码。不幸的是,这仍然像以前一样工作 - 突出显示运行代码的行工作正常,但从源命令运行仍然失败。
  • (即未编辑列名,就好像在获取脚本时忽略了该行代码)。
  • 更新:原来脚本没有使用 UTF-8 编码正确重新加载;显式调用source('C:/R/Rscripts/CleaningCode.R', encoding = 'UTF-8') 使脚本完美运行。

标签: r rename variable-names


【解决方案1】:

不确定这是否是您所说的“更加用户友好”的意思,但删除奇怪字符的一种简单方法是使用 iconv(x, to = "ASCII", sub = ""),它将删除所有非 ASCII 字符。当困难字符使文本分析功能复杂化时,我经常将其用作最后的手段。它有效但有点破坏性,Samuel L. Jackson way of opening some windows

df <- data.frame(1:3, letters[1:3], NA, stringsAsFactors = FALSE)
names(df) <- c("î²lactamases", "regularname", "hopele§§")
df
##   î²lactamases regularname hopele§§
## 1            1           a       NA
## 2            2           b       NA
## 3            3           c       NA
names(df) <- iconv(names(df), to = "ASCII", sub = "")
df
##   lactamases regularname hopele
## 1          1           a     NA
## 2          2           b     NA
## 3          3           c     NA

如果您想进行特定的替换,那么我建议gsub-ing 将names(df) 替换为b,将î² 替换为§s(在我的示例中)等。

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多