-2

您好,我需要知道如何以许多变量在第一列的格式读取 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(例如在数组中??)

4

2 回答 2

1

示例数据不是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)

这将创建一个数据框。VARIABLES您可以使用 split 函数创建一个较小数据帧的列表(每个值对应一个):

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
于 2013-01-23T10:01:27.003 回答
0

另一种基于 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 和测量列的任何数据框重新格式化为默认格式(带有variablevalue列)。之后,cast允许您指定您希望数据的外观。在找到基本规则之前,我很难找出正确的语法cast:在公式参数中,左侧的~任何内容都按行对齐,右侧的任何内容都按列对齐。

另请参阅此要点:https ://gist.github.com/4603945

于 2013-01-23T10:10:23.620 回答