我目前正在使用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
我很感激给予任何帮助。
由于
答案 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