如何从两种不同的条件转换数据?

时间:2017-04-15 03:25:05

标签: r matlab

我正在查看类似的问题,但我找不到类似于我的案例。 我有一个数据框,每个主题,每个条件有多个观察。

DATE        FIRM         beta
2007/1/3    AAPL    -1.484830724
2007/1/4    AAPL    -1.44106242
2007/1/3    ABX     -0.143856121
2007/1/4    ABX     -0.126196004
2007/1/3    AMD     -0.34000246
2007/1/4    AMD     -0.345778331
2007/1/3    AMZN    -1.148531144
2007/1/4    AMZN    -1.051653075
2007/1/3    BAC     -1.775413607
2007/1/4    BAC     -1.514247677
2007/1/3    C       -0.314957499
2007/1/4    C       -0.424694026
2007/1/3    CAT      0.248562922
2007/1/4    CAT      0.061691807
2007/1/3    CHK     -0.991898499
2007/1/4    CHK     -1.221230424
2007/1/3    CMCSA   -1.409432581
2007/1/4    CMCSA   -1.407738422
2007/1/3    CSCO    -0.68245387
2007/1/4    CSCO    -0.509185506
2007/1/3    CVX     -0.950968174
2007/1/4    CVX     -0.73462275
2007/1/3    CY      -0.476404449

这是一个简单的版本。我想将数据转换为不同公司的月度期间。我在Matlab中尝试过,但由于字符串和数字问题而烦恼。有没有人建议如何做到这一点?

感谢。

DATA = dataset('File','2007.txt');
[Y,M] = datevec(DATA.DATE);
M = num2cell(M);
C = cellfun(@(x,y) [num2str(x) y],DATA.FIRM,M,'un',0);
[y,~,ind]=unique(C);
F=accumarray(ind,DATA.beta,[],@(x)nanmean(x));
ff = [y num2cell(F)];

1 个答案:

答案 0 :(得分:1)

不确定将数据转换为每月期间是什么意思。但我认为首先要做的是将Date列转换为日期类,然后提取month信息。这是一个例子。

# Load package
library(tidyverse)
library(lubridate)

# Create example data frame
dat <- data_frame(Date = c("2007/1/3", "2007/1/4", "2007/1/3", 
                  "2007/1/4", "2007/1/3", "2007/1/4"),
                  FIRM = c("AAPL", "AAPL", "ABX", "ABX", "AMD", "AMD"),
                  beta = c(-1.484830724, -1.44106242, -0.143856121,
                           -0.126196004, -0.34000246, -0.345778331)
)

dat2 <- dat %>%
  # Convert the Date column from character to date
  mutate(Date = ymd(Date)) %>%
  # Extract year and month information
  mutate(Year = year(Date), Month = month(Date))

函数ymd可以将字符“yyyy / m / d”或其他类似格式转换为date类。之后,yearmonth函数可以从日期类中提取年和月信息。这是输出。

dat2
# A tibble: 6 × 5
        Date  FIRM       beta  Year Month
      <date> <chr>      <dbl> <dbl> <dbl>
1 2007-01-03  AAPL -1.4848307  2007     1
2 2007-01-04  AAPL -1.4410624  2007     1
3 2007-01-03   ABX -0.1438561  2007     1
4 2007-01-04   ABX -0.1261960  2007     1
5 2007-01-03   AMD -0.3400025  2007     1
6 2007-01-04   AMD -0.3457783  2007     1

然后您可以开始其他流程或数据分析。