您好,我需要知道如何读取格式的csv文件:许多变量在第一列中,它们的日期在第二列中,它们的数据在第三列中
VARIABLES DATE DATA
V1 1/03/2012 1000
V1 1/04/2012 1500
..
V1 1/12/2012 2600
V2 1/03/2012 900
V2 1/04/2012 1200
...
V2 1/12/2012 1000
V3 1/03/2012 200
....
如何提取每个变量 Vi 与其数据和日期相对应(例如在数组中??
示例数据不是csv
格式。您可以使用read.table
来读取文件:
dat <- read.table(text="VARIABLES DATE DATA
V1 1/03/2012 1000
V1 1/04/2012 1500
V1 1/12/2012 2600
V2 1/03/2012 900
V2 1/04/2012 1200
V2 1/12/2012 1000
V3 1/03/2012 200", header = TRUE)
这将创建一个数据框。您可以使用 split 函数创建一个较小的数据框列表(VARIABLES
中的每个值一个):
split(dat, dat$VARIABLES)
结果:
$V1
VARIABLES DATE DATA
1 V1 1/03/2012 1000
2 V1 1/04/2012 1500
3 V1 1/12/2012 2600
$V2
VARIABLES DATE DATA
4 V2 1/03/2012 900
5 V2 1/04/2012 1200
6 V2 1/12/2012 1000
$V3
VARIABLES DATE DATA
7 V3 1/03/2012 200
另一种方法,基于 Sven 的答案,是使用 reshape
包来重塑数据:
> library(reshape)
> dat.m <- melt(dat, id.vars=c('VARIABLES', 'DATE'))
> head(dat.m)
VARIABLES DATE variable value
1 V1 1/03/2012 DATA 1000
2 V1 1/04/2012 DATA 1500
3 V1 1/12/2012 DATA 2600
4 V2 1/03/2012 DATA 900
5 V2 1/04/2012 DATA 1200
6 V2 1/12/2012 DATA 1000
> dat.c <- as.data.frame(cast(dat.m, VARIABLES~DATE+.))
> head(dat.c)
VARIABLES 1/03/2012 1/04/2012 1/12/2012
1 V1 1000 1500 2600
2 V2 900 1200 1000
3 V3 200 NA NA
基本思想是这样的:melt
区分id.vars
(识别列)和measure.vars
(您实际测量的内容),并将具有给定 ID 和测量列的任何数据框重新格式化为默认格式(具有 variable
和value
列)。之后,cast
允许您指定您希望数据的外观。在找到一个基本规则之前,我很难找出正确的语法cast
:在公式参数中,~
左侧的任何内容都按行对齐,右侧的任何内容都按列对齐。
另请参阅此要点:https://gist.github.com/4603945