Re: [问题] 读入"鸻" "鸊鷉" 等怪字

楼主: leo0650 (吕奕)   2015-07-07 23:04:24
※ 引述《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以及处里过程,直接贴图
:

: 不正常的资料
: 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`
作者: helixc (@_2;)   2015-07-08 07:26:00
感谢,我研究一下…

Links booklink

Contact Us: admin [ a t ] ucptt.com