将字符串转换为数字[重复]

Posted

技术标签:

【中文标题】将字符串转换为数字[重复]【英文标题】:Converting string to numeric [duplicate] 【发布时间】:2011-06-23 07:48:07 【问题描述】:

我已经导入了一个测试文件并尝试制作直方图

pichman <- read.csv(file="picman.txt", header=TRUE, sep="/t")   
hist <- as.numeric(pichman$WS)    

但是,我从数据集中的值中得到不同的数字。本来以为这是因为我有文字,所以把文字删了:

table(pichman$WS)    
ws <- pichman$WS[pichman$WS!="Down" & pichman$WS!="NoData"]    

但是,我的数字仍然很高,有人知道吗?

【问题讨论】:

另见***.com/questions/4798343和***.com/questions/3418128 您可以在导入 csv 文件后使用hablar::retype,它将所有列转换为适当的数据类型,即从不考虑因素。所以只需添加pichman %&gt;% retype 【参考方案1】:

我怀疑您的因素有问题。例如,

> x = factor(4:8)
> x
[1] 4 5 6 7 8
Levels: 4 5 6 7 8
> as.numeric(x)
[1] 1 2 3 4 5
> as.numeric(as.character(x))
[1] 4 5 6 7 8

一些cmets:

您提到您的矢量包含字符“Down”和“NoData”。期望/希望 as.numeric 对这些值做什么? 在read.csv 中,尝试使用参数stringsAsFactors=FALSE 你确定是sep="/t 而不是sep="\t" 使用命令head(pitchman) 检查数据的前几行 此外,当您不提供数据时,猜测您的问题是非常棘手的。一个最小的工作示例总是更可取的。例如,我无法运行命令pichman &lt;- read.csv(file="picman.txt", header=TRUE, sep="/t"),因为我无权访问数据集。

【讨论】:

我在新答案中添加了时间。为您 +1,因为您正确并提供了所有选项。 感谢一百万!在我看到它不仅仅是数字之后,我删除了值“Down”和“NoData”,是的,我的斜线混淆了 优秀+1。这对我很有帮助。【参考方案2】:

正如 csgillespie 所说。 stringsAsFactors 默认为 TRUE,它将任何文本转换为因子。因此,即使在删除文本之后,您的数据框中仍然存在一个因素。

现在关于转换,有一种更优化的方法。所以我把它放在这里作为参考:

> x <- factor(sample(4:8,10,replace=T))
> x
 [1] 6 4 8 6 7 6 8 5 8 4
Levels: 4 5 6 7 8
> as.numeric(levels(x))[x]
 [1] 6 4 8 6 7 6 8 5 8 4

为了证明它有效。

时间安排:

> x <- factor(sample(4:8,500000,replace=T))
> system.time(as.numeric(as.character(x)))
   user  system elapsed 
   0.11    0.00    0.11 
> system.time(as.numeric(levels(x))[x])
   user  system elapsed 
      0       0       0 

这是一个很大的改进,但并不总是一个瓶颈。但是,如果您有一个大数据框和很多要转换的列,这一点就变得很重要。

【讨论】:

以上是关于将字符串转换为数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将字符串转换为数字[重复]

将 Typescript 枚举从字符串转换为数字(角度)[重复]

如何将字符串数字的单元格数组转换为数值向量[重复]

如何将十六进制字符串转换为十六进制数字 [重复]

将字符(数字)转换为整数的“java”方式是啥[重复]

C#通过分隔数字将十进制转换为字符串[重复]