这是我需要从PostgreSQL数据库中提取的数据的示例表。 Sample data
如您所见,iv_file(它是一个十六进制数字)列是Bytea格式。因此,当我尝试在R中提取onlu的iv_file列时,我得到以下内容。
`iv_file
1 \\x
2 \\x
3 \\x
4 \\x
5 \\x
6 \\x364630353037303036463035303830303646303530443030364530353142303036453035333730303643303535463030364230353838303036393035414530303638303544313030363630354634303036353035313630313634303533373031363330353537303136323035373730313630303539373031354630354236303135453035443630313544303546363031354330353136303235423035333430323539303535343032353930353733303235373035393130323536303542313032353530354430303235343035463030323533303530453033353230353245303335303035344430333446303536423033344530353842303334443035414130333443303543383033344130354538303334413035303830343438303532373034343730353435303434363035363530343434303538343034343430354132303434333035433230343431303545313034343030353031303533463035314630
数据与原始数据不同。 (请注意,原始数据也有很长的数字) 那么如何在R中使用bytea数据格式?或者我该如何转换它?
答案 0 :(得分:0)
我不相信你可以转换它。 Bytea数据基本上是咬数据。我建议不要把它拉进rdata框架。 Bytea通常是bitdata,是一种无法以传统格式存储的图像或其他东西。
另一种方法是使用JDBC,它通常负责转换。我会看看require(RPostgreSQL)来了解它是如何完成的。
一旦加载到R中,您就可以将其转换回来。尝试这样的事情
udecode <- function(string){
uconv <- function(chars) intToUtf8(strtoi(chars, 16L))
ufilter <- function(string) {
if (substr(string, 1, 1)=="|") uconv(substr(string, 2, 5)) else string
}
string <- gsub("\\\\u([[:xdigit:]]{4})", ",|\\1,", string, perl=TRUE)
strings <- unlist(strsplit(string, ","))
string <- paste(sapply(strings, ufilter), collapse='')
return(string)
}