数据表中的字符串(从数据库导入)被强制转换为整数?

5 浏览
0 Comments

数据表中的字符串(从数据库导入)被强制转换为整数?

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

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"]    

然而,我仍然得到非常高的数字,有人有什么想法吗?

0
0 Comments

问题的出现原因是因为字符串在导入数据库后被转换为整数。解决方法是使用as.character()函数将字符串转换为字符型。

在这个问题中,猜测问题是由于因子导致的。通过使用as.numeric()函数将因子转换为数值型,可以解决这个问题。

在给出的示例中,x是一个因子向量,包含数字4到8。通过使用as.numeric()函数,可以看到因子被转换为了1到5的数值。

为了解决这个问题,可以使用as.character()函数将因子转换为字符型,然后再使用as.numeric()函数将字符型转换为数值型。这样可以得到原始的数值。

此外,还提到了一些其他的评论和建议。例如,在使用read.csv()函数导入数据时,可以使用stringsAsFactors=FALSE参数来避免将字符串转换为因子。还建议使用head()函数来查看数据的前几行,以便检查数据的格式是否正确。

最后,感谢给出解决方案的人,并提醒在提问时最好提供一个最小工作示例,以便其他人能够更好地理解问题并给出解决方案。

0
0 Comments

问题的原因是在导入数据库中的datatable时,字符串被强制转换为整数。解决方法是使用as.numeric(levels(x))[x]来进行转换。

代码如下:

x <- factor(sample(4:8,10,replace=T))
x
as.numeric(levels(x))[x]

下面的代码是为了展示这个方法的效果,并进行性能测试:

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

通过测试可以看出,使用as.numeric(levels(x))[x]来进行转换的性能优于使用as.numeric(as.character(x)),特别是在有大型数据框和需要转换的列数较多的情况下,这种方法的优势更加明显。

0