将data.frame从字符转换为R中的数字以用于时间序列函数

时间:2015-08-05 03:46:31

标签: r time-series

我目前正在使用R(3.2.1),并且在将数据集转换为数字时出现问题,以便绘制我的时间序列图。

我读取了从html页面源中提取的数据表,并将其存储在我的全局环境中。 我无法将data.frame从字符转换为数字,这是我的数据标题的示例。

> head(World)
    World  
V3 "5,689"
V4 "4,672"
V5 "4,344"
V6 "3,745"
V7 "4,246"
V8 "4,823"

这是我的数据结构

> str(World)
 'data.frame':  108 obs. of  1 variable:
 $ World: chr  "1,234" "1,234" "1,234" "4,321" ...

我想将此数据转换为时间序列,但

ts(as.data.frame(sapply(World, function(x) gsub("\"", "", x))))

给我字符类型的整数值,例如

Time Series:
Start = 1 
End = 6 
Frequency = 1 
     World
[1,]    49
[2,]    41
[3,]    37
[4,]    32
[5,]    36
[6,]    43

我试过了

 as.numeric(as.character(World[,1]))

但它给了我带有警告信息的NA值:强制引入的NA。

我可以看到没有引号等的World的值,但是,当我将它用作时间序列时,值会发生变化。

我希望我的最终产品

Time Series:
Start = 1 
End = 6 
Frequency = 1 
     World
[1,]    5,689
[2,]    4,672
[3,]    4,333
[4,]    3,745
[5,]    4,246
[6,]    4,823

我很感激给予任何帮助。

由于

1 个答案:

答案 0 :(得分:2)

警告消息是因为您的“数字”中包含逗号。删除逗号(或将它们转换为句点,如果它们应该是十进制分隔符),则转换为数字将起作用。

此外,您的World对象似乎不是data.frame,因为data.frames不会打印带引号的字符向量。更可能的是,它是一个矩阵。

R> # if the comma is a thousands separator
R> ts(as.matrix(as.numeric(gsub(",", "", World[,1]))))
Time Series:
Start = 1 
End = 6 
Frequency = 1 
     Series 1
[1,]     5689
[2,]     4672
[3,]     4344
[4,]     3745
[5,]     4246
[6,]     4823
R> # if the comma is a decimal separator
R> ts(as.matrix(as.numeric(gsub(",", ".", World[,1]))))
Time Series:
Start = 1 
End = 6 
Frequency = 1 
     Series 1
[1,]    5.689
[2,]    4.672
[3,]    4.344
[4,]    3.745
[5,]    4.246
[6,]    4.823