我正在查看类似的问题,但我找不到类似于我的案例。 我有一个数据框,每个主题,每个条件有多个观察。
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)];
答案 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
类。之后,year
和month
函数可以从日期类中提取年和月信息。这是输出。
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
然后您可以开始其他流程或数据分析。