2016-01-08 3 views
1

У меня есть набор данных, который включает в себя имя столбца blactamases. В файле .csv «бета» часть имени импортируется в R как неверно интерпретированный символ (выглядит как я с квадратным знаком рядом с ним).R-код для изменения имени столбца, содержащего символ, не выполненный при получении

Как я регулярно импортирую этот файл, у меня есть исходный файл для выполнения некоторых основных очистки данных и подготовки набора данных для анализа. Я включил строку кода, чтобы преобразовать имя столбца к чему-то более дружественным к пользователю, смотрите ниже:

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 
+1

Может что-то делать с кодировка, которую вы используете, в RStudio есть опция под файлом, Reopen with Encoding, возможно, попробуйте сыграть с некоторыми из них, чтобы увидеть, работает ли она –

+1

Не могли бы вы попробовать 'read.csv (..., encoding =" Windows-1252 ") 'и снова с« latin1 »и, наконец,« UTF-8 », чтобы убедиться, что кто-нибудь из них исправит проблему? У меня похожие проблемы с франко-канадскими персонажами. Я применил некоторые стратегии для работы с ним в своем ноутбуке: http://bertelsen.ca/invalid-multibyte-string/ –

+0

Спасибо - я пробовал все 3 и UTF-8 правильно кодировал его как бета-знак. Я также выбрал UTF-8 для кодирования сценария, как предлагал @RyanCastner. К сожалению, это по-прежнему работает по-прежнему - выделение строк для запуска кода отлично работает, но запуск из исходной команды по-прежнему не выполняется. –

ответ

0

Не уверен, если это то, что вы имеете в виду под «более дружественным к пользователю», но легкий способ удаления чудные символов использует 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 -ную names(df) заменить î² с b, § с s (в моем примере), и т.д.