gpt4 book ai didi

r - Google 文档导出带有逗号的电子表格值。 R 中的 read.csv() 将这些视为因素而不是数字

转载 作者:行者123 更新时间:2023-12-02 07:45:00 24 4
gpt4 key购买 nike

我是 R 新手,正在尝试将公共(public) Google 电子表格读取到包含数字列的 R 数据框中。我的问题似乎是导出的电子表格包含大量逗号,例如“13,061.422”。 read.csv() 函数将此视为一个因素。我尝试过 stringsAsFactors=FALSE 和 colClasses=c(rep("numeric",7)) 但都不起作用。有没有办法将带有逗号和小数的值强制转换为数值,无论是在 read.csv() 内还是之后当它们被视为 R 数据帧中的因子时?这是我的代码:

require(RCurl)

myCsv <- getURL("https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0Agbdciapt4QZdE95UDFoNHlyNnl6aGlqbGF0cDIzTlE&single=true&gid=0&range=A1%3AG4928&output=csv", ssl.verifypeer=FALSE) #ssl.verifypeer=FALSE gets around certificate issues I don't understand.

fullmatrix <- read.csv(textConnection(myCsv))

str(fullmatrix)

结果是:

'data.frame':   4927 obs. of  7 variables:
$ wave. : Factor w/ 4927 levels "1,000.8900","1,002.8190",..: 4875 4874 4873 4872 4871 4870 4869 4868 4867 4866 ...
$ wavelength : Factor w/ 4927 levels "1,000.074","1,000.267",..: 1 2 3 4 5 6 7 8 9 10 ...
$ d2o : num 85.2 87.7 86.3 87.6 85.6 ...
$ di : num 54.3 55.8 54.9 55.6 54.9 ...
$ ddw : num 48.2 49.7 49.4 50.2 49.6 ...
$ ddw.old : num 53.3 55 53.9 54.8 53.7 ...
$ d2o.ddw.mix: num 65.8 67.9 67.2 68.4 66.8 ...

感谢您的帮助!我是 R 新手,所以猜测(希望)这很简单!

最佳答案

是的。两种方法。一开始最容易理解的可能就是 as.is=TRUE 将它们保留为字符向量,然后在转换之前使用 gsub 删除逗号和任何货币符号为数字。第二个有点困难,但我认为更困难。为您正在使用的格式创建一个 as-方法。然后你可以使用 colClasses 一步完成。

我看到@EDi已经做了版本#1(使用stringsAsFactors而不是as.is,所以我将记录策略#2:

 library(methods)
setClass("num.with.commas")
#[1] "num.with.commas"
setAs("character", "num.with.commas",
function(from) as.numeric(gsub(",", "", from)))
require(RCurl)
#Loading required package: RCurl
#Loading required package: bitops

myCsv <- getURL("https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0Agbdciapt4QZdE95UDFoNHlyNnl6aGlqbGF0cDIzTlE&single=true&gid=0&range=A1%3AG4928&output=csv", ssl.verifypeer=FALSE)
> fullmatrix <- read.csv(textConnection(myCsv),
colClasses=c(rep("num.with.commas",2), rep("numeric",4) ))
str(fullmatrix)
#--------------
'data.frame': 4927 obs. of 7 variables:
$ wave. : num 9999 9997 9995 9993 9992 ...
$ wavelength : num 1000 1000 1000 1001 1001 ...
$ d2o : num 85.2 87.7 86.3 87.6 85.6 ...
$ di : num 54.3 55.8 54.9 55.6 54.9 ...
$ ddw : num 48.2 49.7 49.4 50.2 49.6 ...
$ ddw.old : num 53.3 55 53.9 54.8 53.7 ...
$ d2o.ddw.mix: num 65.8 67.9 67.2 68.4 66.8 ...

as-method 是强制的。 R 语言中有很多这样的方法,例如 as.listas.numericas.character。在每种情况下,他们都尝试获取一种模式下的输入,并在不同模式下制作合理的副本。例如,将矩阵强制转换为数据框是有意义的,因为它们都有二维。将数据帧强制转换为矩阵的意义不大(但它确实会成功,因为会丢失列的所有属性并强制转换为通用模式。)

在本例中,我将字符串作为输入,删除所有逗号,并将字符值强制为数字。然后我使用 read.table 的(在本例中通过 read.csv)'colClasses' 参数来分派(dispatch)到我用 注册的 as-方法设置为。您可能需要访问 help(setAs) 页面了解更多详细信息。 S4等级制度让很多人感到困惑,包括我。这是我使用 S4 方法取得的唯一成功领域。

关于r - Google 文档导出带有逗号的电子表格值。 R 中的 read.csv() 将这些视为因素而不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8651062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com