如何在 R 中读取包含三列变量和数据的文件



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

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

最新更新