Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R sqldf将数字列按顺序更改为字符列_R_Type Conversion_Sqldf - Fatal编程技术网

R sqldf将数字列按顺序更改为字符列

R sqldf将数字列按顺序更改为字符列,r,type-conversion,sqldf,R,Type Conversion,Sqldf,今天我发现了一个无法解释的问题。这是众所周知的行为吗 数据集: structure(list(Original.Unit = c("some unit", "some unit", "some unit", "some unit", "some unit", "some unit"), Result = c(24, 28, NA, 4.1, 4.5, 2.6), Conversion.Factor = c(1, 1.54, 1, 2.2, 1, 1)), .Names = c("Origin

今天我发现了一个无法解释的问题。这是众所周知的行为吗

数据集:

structure(list(Original.Unit = c("some unit", "some unit", "some unit", 
"some unit", "some unit", "some unit"), Result = c(24, 28, NA, 
4.1, 4.5, 2.6), Conversion.Factor = c(1, 1.54, 1, 2.2, 1, 1)), .Names = c("Original.Unit", 
"Result", "Conversion.Factor"), row.names = c(NA, 6L), class = "data.frame")
代码:

为什么ConvResult列现在是character类型?这是因为NA吗


看来这就是重点。当我将NA替换为1000时,结果变成了数字。但是为什么会这样呢?

是的,看来你是对的。使用orderby时,sqldf倾向于猜测输出列的类,在这种情况下会出错。因此,我想您可以自己设置列类型,以确保:

  result <- sqldf("SELECT `Original.Unit`, Result, `Conversion.Factor`, Result * `Conversion.Factor` AS ConvResult FROM data ORDER BY ConvResult",method = c("character", "numeric", "numeric", "numeric"))

result变通方法,将结果排序到sqldf之外
result SQLite使用第一行来获取类型信息,在本例中,
ConvResult
的第一行是NA,因此无法识别。您可以使用H2后端尝试查询:
库(RH2);sqldf(“…”)
感谢您的解释!sqldf暴露了更多的问题。它会丢失编码(或者更确切地说是将文本从UTF8编码为本地编码),有时会丢失POSIXct类等等。但我还是喜欢它:)因为我创建了“包装”sqldf并立即修复许多“问题”的函数sqldfEx,所以我将用这个函数更新它。谢谢
> (result <- sqldf("SELECT `Original.Unit`, Result, `Conversion.Factor`, Result * `Conversion.Factor` AS ConvResult FROM data"))
  Original.Unit Result Conversion.Factor ConvResult
1     some unit   24.0              1.00      24.00
2     some unit   28.0              1.54      43.12
3     some unit     NA              1.00         NA
4     some unit    4.1              2.20       9.02
5     some unit    4.5              1.00       4.50
6     some unit    2.6              1.00       2.60

> sapply(result, function(r) { class(r)})
    Original.Unit            Result Conversion.Factor        ConvResult 
      "character"         "numeric"         "numeric"         "numeric" 
> (result <- sqldf("SELECT `Original.Unit`, Result, `Conversion.Factor`, Result * `Conversion.Factor` AS ConvResult FROM data ORDER BY ConvResult"))
  Original.Unit Result Conversion.Factor ConvResult
1     some unit     NA              1.00       <NA>
2     some unit    2.6              1.00        2.6
3     some unit    4.5              1.00        4.5
4     some unit    4.1              2.20       9.02
5     some unit   24.0              1.00       24.0
6     some unit   28.0              1.54      43.12
> sapply(result, function(r) { class(r)})
    Original.Unit            Result Conversion.Factor        ConvResult 
      "character"         "numeric"         "numeric"       "character" 
  result <- sqldf("SELECT `Original.Unit`, Result, `Conversion.Factor`, Result * `Conversion.Factor` AS ConvResult FROM data ORDER BY ConvResult",method = c("character", "numeric", "numeric", "numeric"))