【问题标题】:transforming / updating / typecasting list values from int & num to strings将列表值从 int 和 num 转换/更新/类型转换为字符串
【发布时间】:2016-07-13 14:02:54
【问题描述】:

我正在使用 R 脚本从 MySQL 数据库中检索数据,然后将其写入 CSV,但是我遇到了一个问题,即我想写成字符串的两列数据正在被写出作为整数和数字(在本例中为科学计数法)。

我想把这些写成字符串值,但我发现这不是一个简单的任务,尽管做了一些谷歌搜索和实验。

相关代码:

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

我们将不胜感激!

【问题讨论】:

  • 在写入 csv 之前将 TimeUpdated 转换为字符。
  • 您是否尝试过使用 as.character() 转换列“Subscribed”和“TimeUpdated”,例如 type_date$Subscribed
  • @Bernhard 绝对在正确的轨道上,谢谢。现在的问题是 TimeUpdated 最终像“1.146917239e+18”,而我只想要“1385297883000000000”。
  • @Bernhard 没关系,我想通了。感谢你的协助!是的,我是 R 的大菜鸟。;)

标签: mysql r rscript


【解决方案1】:

感谢 @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)

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2019-05-18
    相关资源
    最近更新 更多