如何在R中以数字类的形式加载带1000分隔符的df?

如何在R中以数字类的形式加载带1000分隔符的df?,r,R,我下载了一个UTF-16 Unicode文本(.txt)文件,保存在mac驱动器上时默认为逗号分隔值(.csv)。此文件包含数值数据,对于大于1000的数字应用了1000分隔符。在R中加载时,此数据在字符类中。为了转换为数值类,我执行以下操作: tx <- read.table("/Users/username/Desktop/report.csv",sep="\t", dec = ".", fileEncoding = "UTF-16LE", fill = T, skip=1 , quo

我下载了一个UTF-16 Unicode文本(.txt)文件,保存在mac驱动器上时默认为逗号分隔值(.csv)。此文件包含数值数据,对于大于1000的数字应用了1000分隔符。在R中加载时,此数据在字符类中。为了转换为数值类,我执行以下操作:

tx <- read.table("/Users/username/Desktop/report.csv",sep="\t", dec = ".", fileEncoding = "UTF-16LE", fill = T, skip=1 , quote="", header=T, stringsAsFactors = FALSE)

tx$Cost <- gsub("\\,", replacement = "", x = tx$Cost)

tx$Cost <- as.numeric(tx$Cost)
Warning message:
NAs introduced by coercion 
tx <- read.table("/Users/username/Desktop/report.csv",sep="\t", dec = ".", fileEncoding = "UTF-16LE", fill = T, skip=1 , quote="", header=T, stringsAsFactors = FALSE)
tx$Cost <- iconv(tx$Cost,"UTF-16","ASCII",sub='')
tx$Cost <- gsub("\\,", replacement = "", x = tx$Cost)
tx$Cost <- as.numeric(tx$Cost)

有人能帮我用as.numeric()将它们转换成数值类吗?

我怀疑gsub在您的UTF-16字符串上不能正常工作。也许您应该在进行替换之前转换字符串。请尝试以下操作:

tx <- read.table("/Users/username/Desktop/report.csv",sep="\t", dec = ".", fileEncoding = "UTF-16LE", fill = T, skip=1 , quote="", header=T, stringsAsFactors = FALSE)

tx$Cost <- gsub("\\,", replacement = "", x = tx$Cost)

tx$Cost <- as.numeric(tx$Cost)
Warning message:
NAs introduced by coercion 
tx <- read.table("/Users/username/Desktop/report.csv",sep="\t", dec = ".", fileEncoding = "UTF-16LE", fill = T, skip=1 , quote="", header=T, stringsAsFactors = FALSE)
tx$Cost <- iconv(tx$Cost,"UTF-16","ASCII",sub='')
tx$Cost <- gsub("\\,", replacement = "", x = tx$Cost)
tx$Cost <- as.numeric(tx$Cost)

tx使用
setClass
setAs
colClasses
的工作示例:

 library(methods)
  setClass("chr.w.commas", contains=numeric())
  setAs("character", "chr.w.commas", function(from) 
                              as.numeric(gsub("\\,", "",from )) )
 dat <- read.table(text="Orig after_gsub num
 1      '95.31'      '95.31'      '95.31'
 2     992.77     992.77     992.77
 3 '1,719.68'  '1719.68' NA
 4 '3,135.79'  '3135.79' NA
 5     111.91 111.91 111.91
 6     305.12     305.12     305.12", header=TRUE, colClasses="chr.w.commas")
 str(dat)
'data.frame':   6 obs. of  3 variables:
 $ Orig      : num  95.3 992.8 1719.7 3135.8 111.9 ...
 $ after_gsub: num  95.3 992.8 1719.7 3135.8 111.9 ...
 $ num       : num  95.3 992.8 NA NA 111.9 ...
库(方法)
setClass(“chr.w.commas”,contains=numeric())
setAs(“字符”、“chr.w.逗号”、函数(从)
as.numeric(gsub(“\\,”和“”,from)))

dat谢谢所有在这里帮忙的人。实际上,我发现我的加载函数是问题所在,下面的代码从一开始就做了一个简单的技巧来正确读取数据

read.csv(filename, sep="\t", fileEncoding="UTF-16", skip=1)    

在定义了:tx=data.frame(Cost=c('100','100.1','1999.5',NA))@bondedust之后,当我执行相同的步骤时,没有出现任何错误。我不确定如何在我的情况下应用ColClass,您能给我一个特定于这种情况的提示吗?我可以测试并提供反馈。谢谢大家@初学者:组合的as.numeric(gsub())函数似乎无法修复:(@eN-V:如果你加载一个csv,并在一列上应用1000个分隔符格式,你可能可以复制这个场景;而不是在GUI上分配一个带有这些值的df。希望这有助于你复制!为什么不把这些数据或它的一个样本放出来,让我们试试看,而不是猜测!我尝试使用iconv()进行转换)正如你所说。最初,我得到这个[1]“95.31”“992.77”“1719.68”“3135.79”“111.91”“305.12”;但在转换后,我得到了这个[1]”“”。我做错了什么吗?
iconv(tx$Cost,“UTF-8”,“ASCII”,sub='')
工作吗?或者,跳过
iconv()
并指定
encoding=“ASCII”
在您的
read.table()
中重新编码?
iconv(tx$Cost,“UTF-8”,“ASCII”,sub=”)
仍然通过强制引入NAs;以及fileEncoding=“ASCII”导致read.table出错:input中没有可用的行..Bummer.如果此文件位于公共网站上,为什么不共享链接,我们将直接处理它?很好的解决方案!它也适用于多个小数点,例如“1234719.68”变为“1234719.68”