作者celestialgod (天)
看板R_Language
标题Re: [问题] 要如何将$之後字串用回圈写
时间Fri Apr 14 22:50:38 2017
※ 引述《jklkj (诚实可靠小郎君)》之铭言:
: [问题类型]:
:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
:
: [软体熟悉度]:
: 请把以下不需要的部份删除
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
:
: 我目前用RPostgreSQL把资料库的资料抓下来,但是只要是中文的栏位都变成乱码
: 我想用比较简单的方法把UTF8转成big5
:
: [程式范例]:
:
: df$addr <- iconv(df$addr, "UTF8", "big5")
: 如上述,我目前是用iconv一个一个转,想请问一下我要怎麽把回圈写进$之後
: 或是可以告诉我关键字或概念
: 或是有没有更简便的方法
:
提醒:下面程式没有判断factor,如有factor请自行加入判断式
# data.table做法:
library(data.table)
DT[ , lapply(.SD, function(x)iconv(x,"UTF8", "BIG5"))]
# 如果有numeric或是integer column的话:
DT[ , lapply(.SD, function(x){
if (is.character(x))
iconv(x,"UTF8", "BIG5")
} else return(x)})]
# dplyr做法:
library(dplyr)
DF %>% mutate_each(funs(iconv(., "UTF8", "BIG5")))
# 如果有numeric或是integer column的话:
DF %>% mutate_if(is.character, funs(iconv(., "UTF8", "BIG5")))
# base函数解法:
evalExpr <- lapply(names(DF), function(x){
bquote(iconv(.(as.symbol(x)), "UTF8", "BIG5"))
})
do.call(function(...) transform(DF, ...), evalExpr)
# 如果有numeric或是integer column的话:
evalExpr <- lapply(names(DF)[sapply(DF, is.character)],
function(x) bquote(iconv(.(as.symbol(x)), "UTF8", "BIG5")))
do.call(function(...) transform(DF, ...), evalExpr)
base函数解法应该是最难的XDD
base当然还可以用其他大大提到的方式直接做:
lapply(names(DF), function(x){
iconv(DF[[x]], "UTF8", "BIG5")
})
或是
lapply(names(DF)[sapply(DF, is.character)], function(x){
iconv(DF[[x]], "UTF8", "BIG5")
})
只是除了要多转一次data.frame之外,第二个还要把numeric, integer column并回去
--
R资料整理套件系列文:
magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9
data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue
dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b
tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz
pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.246.26.70
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1492181442.A.5B4.html
※ 编辑: celestialgod (111.246.26.70), 04/14/2017 22:59:42
※ 编辑: celestialgod (111.246.26.70), 04/14/2017 23:10:26
1F:推 jklkj: 最近再来试试,感谢 04/18 17:52