2016-07-13 8 views
1

Rスクリプトを使用してMySQLデータベースからデータを取得し、それをCSVに書き出していますが、文字列として書きたいデータは、整数と数値として書き出されます(この場合、科学的表記法で)。intとnumのリスト値を文字列に変換/更新/型キャストする

代わりに文字列値として書き留めておきたいですが、グーグルと実験のかなりの部分を行っていますが、これは簡単な作業ではありません。

関連するコード:

conn <- dbConnect(MySQL(), host = "127.0.0.1", user="REDACTED", password="REDACTED", dbname="REDACTED", port=8906) 
type_data <- dbGetQuery(conn, paste("SELECT * FROM ", arg, " WHERE 1 LIMIT 10", sep="")) 

# Problem: "Subscribed" and "TimeUpdated" are coming through as numbers instead of strings 

write.csv(type_data, paste("./",arg,".csv", sep=""), row.names=F) 
dbDisconnect(conn) 

望ましい結果:

"Id","EntityId","EntityType","CommunicationType","Subscribed","TimeUpdated" 
"0002INKRyUolIrjG5DbUa0lDqUjxt","4374484","PERSON","MFS","1","1385297883000000000" 
"0004WaXpmvbOh3WG3hd6kQtPINibv","8361929","PERSON","MFS","1","1437798832740631885" 
"0005l1fy1TJiFhyiEK2IXRCxfqee5","4197014","PERSON","SURVEYS_AND_POLLS","0","1146917239000000000" 
"0008Qb2ra1PoSLgbumc2wmDfvexx8","4155704","PERSON","MFS","1","1345053223000000000" 
"000C1IKgHrFaqmlHlKGGhigGyoaw4","4515071","PERSON","PARTNER","1","1215098959000000000" 
"000Czw8Gv5w3eNoOmOFVTKLIuc2ti","4372360","PERSON","MFS","1","1384952236000000000" 
"000DOsk9xlYKvs11PzZFRgmOpYfiA","4347384","PERSON","SURVEYS_AND_POLLS","1","1177513307000000000" 
"000IQ4TKYHAbb334zFYdWVCZZfMYo","4470083","PERSON","PARTNER","1","1446945757133940400" 
"000LbifV4rUa2MhxFlVZ52PSek5kG","499194","PERSON","SURVEYS_AND_POLLS","0","1097867573000000000" 

実際の結果は:

"Id","EntityId","EntityType","CommunicationType","Subscribed","TimeUpdated" 
"0002INKRyUolIrjG5DbUa0lDqUjxt","4374484","PERSON","MFS",1,1.385297883e+18 
"0004WaXpmvbOh3WG3hd6kQtPINibv","8361929","PERSON","MFS",1,1437798832740631808 
"0005l1fy1TJiFhyiEK2IXRCxfqee5","4197014","PERSON","SURVEYS_AND_POLLS",0,1.146917239e+18 
"0008Qb2ra1PoSLgbumc2wmDfvexx8","4155704","PERSON","MFS",1,1.345053223e+18 
"000C1IKgHrFaqmlHlKGGhigGyoaw4","4515071","PERSON","PARTNER",1,1.215098959e+18 
"000Czw8Gv5w3eNoOmOFVTKLIuc2ti","4372360","PERSON","MFS",1,1.384952236e+18 
"000DOsk9xlYKvs11PzZFRgmOpYfiA","4347384","PERSON","SURVEYS_AND_POLLS",1,1.177513307e+18 
"000IQ4TKYHAbb334zFYdWVCZZfMYo","4470083","PERSON","PARTNER",1,1446945757133940480 
"000LbifV4rUa2MhxFlVZ52PSek5kG","499194","PERSON","SURVEYS_AND_POLLS",0,1.097867573e+18 
"000OWvUHdmjeL34XzuVLmHQBple7X","4176205","PERSON","MFS",1,1.143985154e+18 

援助を最も高く評価されるだろう!

+0

csvに書き込む前に 'TimeUpdated'を文字に変換してください。 – Psidom

+0

type_date $ Subscribed < - as.character(type_data $ Subscribed)のようにas.character()で列 "Subscribed"と "TimeUpdated"を変換しようとしましたか? – Bernhard

+0

@Bernhardは間違いなく正しい道に、ありがとう。今の問題はTimeUpdatedが "1.146917239e + 18"のようになりますが、私はただ "1385297883000000000"のようになります。 – adriandz

答えて

0

@Bernhardに助けてくれてありがとうございます - これは実用的な解決策です。

options(scipen = 999) # so that TimeUpdated isn't outputted using scientific notation 

conn <- dbConnect(MySQL(), host = "127.0.0.1", user="REDACTED", password="REDACTED", dbname="REDACTED", port=8906) 
type_data <- dbGetQuery(conn, paste("SELECT * FROM ", arg, " WHERE 1", sep="")) 

# convert the subscribed and timeupdated columns to strings 
type_data$Subscribed <- as.character(type_data$Subscribed) 
type_data$TimeUpdated <- as.character(type_data$TimeUpdated) 

write.csv(type_data, paste(args[[1]], "/", arg, ".csv", sep=""), row.names=F) 
dbDisconnect(conn) 
関連する問題