数据表中的字符串(从数据库导入)被强制转换为整数?
问题的出现原因是因为字符串在导入数据库后被转换为整数。解决方法是使用as.character()函数将字符串转换为字符型。
在这个问题中,猜测问题是由于因子导致的。通过使用as.numeric()函数将因子转换为数值型,可以解决这个问题。
在给出的示例中,x是一个因子向量,包含数字4到8。通过使用as.numeric()函数,可以看到因子被转换为了1到5的数值。
为了解决这个问题,可以使用as.character()函数将因子转换为字符型,然后再使用as.numeric()函数将字符型转换为数值型。这样可以得到原始的数值。
此外,还提到了一些其他的评论和建议。例如,在使用read.csv()函数导入数据时,可以使用stringsAsFactors=FALSE参数来避免将字符串转换为因子。还建议使用head()函数来查看数据的前几行,以便检查数据的格式是否正确。
最后,感谢给出解决方案的人,并提醒在提问时最好提供一个最小工作示例,以便其他人能够更好地理解问题并给出解决方案。
问题的原因是在导入数据库中的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)),特别是在有大型数据框和需要转换的列数较多的情况下,这种方法的优势更加明显。