[問題] 要如何將$之後字串用迴圈寫

看板R_Language作者 (誠實可靠小郎君)時間8年前 (2017/04/14 11:58), 編輯推噓1(1020)
留言21則, 6人參與, 最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 請把以下不需要的部份刪除 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 我目前用RPostgreSQL把資料庫的資料抓下來,但是只要是中文的欄位都變成亂碼 我想用比較簡單的方法把UTF8轉成big5 [程式範例]: df$addr <- iconv(df$addr, "UTF8", "big5") 如上述,我目前是用iconv一個一個轉,想請問一下我要怎麼把迴圈寫進$之後 或是可以告訴我關鍵字或概念 或是有沒有更簡便的方法 [環境敘述]: 請提供 sessionInfo() 的輸出結果, 裡面含有所有你使用的作業系統、R 的版本和套件版本資訊, 讓版友更容易找出錯誤 [關鍵字]: 選擇性,也許未來有用 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.23.167.43 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1492142292.A.C75.html

04/14 12:04, , 1F
df$addr <- sapply(df$addr, function(x) iconv(x,
04/14 12:04, 1F

04/14 12:06, , 2F
'UTF8', 'big5')) 小弟不才 嘗試解 有錯請指正
04/14 12:06, 2F

04/14 12:16, , 3F
何不試試看抓資料回來時就讓它是正確的編碼?也許可行
04/14 12:16, 3F

04/14 12:16, , 4F
dbGetQuery(conn, "set client_encoding to 'Big5'")
04/14 12:16, 4F

04/14 12:17, , 5F
then dbReadTable(conn, "YourTableName")
04/14 12:17, 5F

04/14 13:30, , 6F
用`[[`, ex: df[["addr"]]
04/14 13:30, 6F

04/14 13:56, , 7F
這樣單欄可處理 df$addr,想請問要如何處理整個導進來
04/14 13:56, 7F

04/14 13:56, , 8F
的table?
04/14 13:56, 8F

04/14 14:15, , 9F
for i in c(1:length(df)){
04/14 14:15, 9F

04/14 14:15, , 10F
df[i] <- iconv(df[i], "UTF8", "big5")}
04/14 14:15, 10F

04/14 14:16, , 11F
小弟也是新手,不曉得有沒有解決到你的問題
04/14 14:16, 11F

04/14 14:37, , 12F
for(x in c(1:16)){ res[[x]]=iconv(res[[x]],"UTF8"
04/14 14:37, 12F

04/14 14:37, , 13F
,"CP950") }
04/14 14:37, 13F

04/14 22:19, , 14F
data.table: DT[ , lapply(.SD, function(x){
04/14 22:19, 14F

04/14 22:20, , 15F
iconv(x,"UTF8", "BIG5")}]
04/14 22:20, 15F

04/14 22:20, , 16F
dplyr: DF %>% mutate_each(funs(iconv(., "UTF8",
04/14 22:20, 16F

04/14 22:21, , 17F
"BIG5")))
04/14 22:21, 17F

04/14 22:21, , 18F
如果要限定character column可以使用 mutate_if
04/14 22:21, 18F

04/14 22:23, , 19F
DF %>% mutate_if(is.character, funs(iconv(.,
04/14 22:23, 19F

04/14 22:23, , 20F
"UTF8", "BIG5")))
04/14 22:23, 20F

04/14 22:23, , 21F
我應該回一篇文章的Orz
04/14 22:23, 21F
文章代碼(AID): #1Oy4ZKnr (R_Language)
文章代碼(AID): #1Oy4ZKnr (R_Language)