Re: [問題] 讀入"鴴" "鸊鷉" 等怪字

看板R_Language作者 (呂奕)時間8年前 (2015/07/07 23:04), 8年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串6/6 (看更多)
※ 引述《helixc (@_2;)》之銘言: : ※ 引述《celestialgod (攸藍)》之銘言: : : # readxl套件: (不用JAVA,讀取也比較快,也不會轉換字串為factor) : : library(readxl) : : dat = read_excel("birdnames.xls") : 這邊報告一下... readxl這個套件沒問題, : 但用dplyr處裡資料的時候就會有問題。 : [code] : library(readxl) : library(dplyr) : fileName = "birdnames.xls" : #讀取資料 : x = read_excel(fileName) : #資料讀取輸出正常 : x$c_name[51:52] : #使用dplyr::select來讀資料,用兩種不同的寫法,一樣都不正常 : y1<-select(x, c_name, Order) ; y1[51:52,] : y2<- x %>% select(c_name, Order) ; y2[51:52,] : #使用base::unique來讀取資料,正常 : z<-unique(x$c_name); z[51:52] : 還不太會貼code以及處裡過程,直接貼圖 : http://imgur.com/7oOVkLm
: 不正常的資料 : Source: local data frame [2 x 2] : c_name Order : 1 白嘴潛鳥 51 : 2 小<U+9E0A><U+9DC9> 52 : 正常的資料 : [1] "白嘴潛鳥" "小鸊鷉" : 如果是package處裡的問題的話,那轉移到非windows系統是無解的吧? : 只能捨棄dplyr使用*apply來輸出名錄了... : 可是我還不會用*apply來寫dplyr-like的功能阿Orz 幫忙補充c大第二個連結的方法 https://stat.ethz.ch/pipermail/r-devel/2015-May/071259.html 因為 data.frame 的 `print` method 裡面會通過 format() 轉換, (如底下function中的 #old# 部分),所以可能有些locale所造成不同的轉換。 `print`函數是generic function, 因此可自定義新 class 及 所對應的 `print` method 來實現略過format(), 或可選擇直接在 global environment 定義新的 `print.data.frame`, 使得不用更改class的情況下,優先用自定義的 method print.data.frame <- function (x, ..., digits = NULL, quote = FALSE, right = TRUE, row.names = TRUE) { n <- length(row.names(x)) if (length(x) == 0L) { cat(sprintf(ngettext(n, "data frame with 0 columns and %d row", "data frame with 0 columns and %d rows", domain = "R-base"), n), "\n", sep = "") } else if (n == 0L) { print.default(names(x), quote = FALSE) cat(gettext("<0 rows> (or 0-length row.names)\n")) } else { #old# m <- as.matrix(format.data.frame(x, digits = digits, #old# na.encode = FALSE)) m <- as.matrix(x) if (!isTRUE(row.names)) dimnames(m)[[1L]] <- if (identical(row.names, FALSE)) rep.int("", n) else row.names print(m, ..., quote = quote, right = right) } invisible(x) } df <- data.frame(x="黑頸鸊鷉"); df ## x ## 1 黑頸鸊鷉 # 測試原本的 `print` --------------------------------------- # 不曉得什麼原因"黑頸"可顯示但"鸊鷉"卻無法: Sys.setlocale("LC_CTYPE", locale="Chinese_Taiwan.950") df <- data.frame(x="黑頸鸊鷉"); df ## x ## 1 黑頸<U+9E0A><U+9DC9> # 測試不同locale,則全部以unicode碼顯示 Sys.setlocale("LC_CTYPE", locale="English_United States.1252") df <- data.frame(x="黑頸鸊鷉"); df ## x ## 1 <U+9ED1><U+9838><U+9E0A><U+9DC9> -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.161.90 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1436281469.A.DCD.html

07/08 07:26, , 1F
感謝,我研究一下…
07/08 07:26, 1F
※ 編輯: leo0650 (211.20.117.229), 07/09/2015 14:55:54
文章代碼(AID): #1Lc-fztD (R_Language)
文章代碼(AID): #1Lc-fztD (R_Language)