小编FBE*_*FBE的帖子

R:在时间相关数据帧中查找并添加缺失(/非现有)行

我正在努力解决以下问题.

如果有一个(大)数据框,则具有以下内容:

  • 列的组合是几个列,是"唯一"组合,比如ID
  • 与时间相关的专栏
  • 与度量相关的列

我想确保对于每个时间间隔的每个唯一ID,数据框中都有一个度量.如果不是,我想为该时间/ ID添加0(或NA)度量.

要说明问题,请创建以下test数据框:

test <- data.frame(
    YearWeek   =rep(c("2012-01","2012-02"),each=4),
    ProductID  =rep(c(1,2), times=4),
    CustomerID =rep(c("a","b"), each=2, times=2),
    Quantity   =5:12
)[1:7,]

  YearWeek ProductID CustomerID Quantity
1  2012-01         1          a        5
2  2012-01         2          a        6
3  2012-01         1          b        7
4  2012-01         2          b        8
5  2012-02         1          a        9
6  2012-02         2          a       10
7  2012-02         1          b       11
Run Code Online (Sandbox Code Playgroud)

第8行是故意遗漏的.这样,我为ID'2 Quantity-b'(ProductID-CustomerID)模拟时间值"2012-02" 的"缺失值"(缺失).

我想做的是调整data.frame,使所有时间值(这些都是已知的,在本例中只是"2012-01"和"2012-02"),对于所有ID组合(这些是事先不知道,但这是'数据框中的所有唯一ID组合',因此ID列上的唯一集合),数据框中有数量.

这应该是这个例子的结果(如果我们选择NA缺失值,通常我想控制它):

  YearWeek ProductID CustomerID Quantity
1  2012-01 …
Run Code Online (Sandbox Code Playgroud)

r

15
推荐指数
1
解决办法
6968
查看次数

使用带有对象名称的变量保存对象

可能重复:
如何使用特定变量名保存()

我想知道一个简单的方法是使用一个objectName带有要保存的对象名称的变量来保存R 中的对象.我希望这可以轻松保存对象,其名称在文件名中.

我试图使用get,但我没有设法用它的原始对象名称保存对象.

例:

如果我有一个名为"temp"的对象,我想将其保存在"dataDir"目录中.我将对象的名称放在变量"objectName"中.

尝试1:

objectName<-"temp"
save(get(objectName), file=paste(dataDir, objectName, ".RData", sep=""))
load(paste(dataDir, objectName, ".RData", sep=""))
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为R试图保存一个被调用的对象get(objectName),而不是这个调用的结果.所以我尝试了以下方法:

尝试2:

objectName<-"temp"
object<-get(objectName)
save(object, file=paste(dataDir, objectName, ".RData", sep=""))
load(paste(dataDir, objectName, ".RData", sep=""))
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,因为R保存名为"object"的对象,而不是名称"temp".加载后我有一个"对象"的副本,而不是"临时".(是的,内容相同......但这不是我想要的:)).所以我认为它应该是指针.所以尝试了以下内容:

尝试3:

objectName<-"temp"
object<<-get(objectName)
save(object, file=paste(dataDir, objectName, ".RData", sep=""))
load(paste(dataDir, objectName, ".RData", sep=""))
Run Code Online (Sandbox Code Playgroud)

与尝试2相同的结果.但我不确定我在做我认为我正在做的事情.

这是什么解决方案?

r save

12
推荐指数
1
解决办法
1万
查看次数

预测准确性:没有MASE,两个向量作为参数

我正在使用包中的accuracy函数forecast来计算准确度度量.我用它来计算拟合时间序列模型的度量,例如ARIMA或指数平滑.由于我在不同维度和聚合级别上测试不同的模型类型,我使用的是MUND,即Hyndman等人(2006年,"另一种预测准确度测量")引入的绝对缩放误差,来比较不同的模型在不同的层面上.

现在我也将模型与预测历史进行比较.因为我只有预测值而不是模型,所以我尝试使用该accuracy函数.在函数描述中提到它还允许提供两个向量参数,一个具有预测值,一个具有实际值,以计算度量(而不是拟合模型):

f:类"预测"的对象,或包含预测的数字向量.如果省略x,它也将与Arima,ets和lm对象一起使用 - 在这种情况下,返回样本内准确度度量.

x:可选的数字向量,包含与对象长度相同的实际值.

但我很惊讶所有措施都归还了,期待MASE.所以我想知道是否有人知道原因是什么?为什么MASE没有返回,而在accuracy函数中使用两个向量作为参数?

r forecasting

7
推荐指数
2
解决办法
5334
查看次数

使用'#'作为分隔符时,Read.table不起作用?

我有一个带#符号作为分隔符的数据文件,我想用read.file命令读取.

首先; 它是一个大数据文件,我不想更改分隔符,因为:

  1. 使用数据中已存在的不同分隔符的风险(注意:可以检查,但第2点会使这有点复杂)
  2. 我希望更多这些数据文件的所有#符号都是分隔符,所以每次我想再次读取这些文件时,我都不想更改数据文件

所以我假设我可以使用命令的sep参数read.file.但#正如我所预料的那样,它并没有成功.只读取第一列.我尝试了一些不同的分隔符,除了#标志外,一切正常.请参阅下面的一些示例,包括#分隔符.

该文件看起来像:

H1#H2#H3
a#b#c
d#e#f
Run Code Online (Sandbox Code Playgroud)

R中的代码执行包括结果,对于我更改分隔符的同一文件.对于=,|,@以及$它工作得很好,但不适合#...

> read.table(file='test_data.dat', check.names=F, sep='=', header=T)
H1 H2 H3
1  a  b  c
2  d  e  f
> read.table(file='test_data.dat', check.names=F, sep='|', header=T)
H1 H2 H3
1  a  b  c
2  d  e  f    
> read.table(file='test_data.dat', check.names=F, sep='@', header=T)
H1 H2 H3
1  a  b …
Run Code Online (Sandbox Code Playgroud)

r read.table

4
推荐指数
1
解决办法
391
查看次数

使用auto.arima:OCSBtest(x,m)中的错误:下标超出范围

我在一组庞大的时间序列上使用了一个大的(isplit)循环来测试ARIMA模型.为此,我正在使用包中的auto.arima功能forecast.

为此,我创建了一个函数,遍历所有时间序列,同时跟踪进度并存储拟合的模型和统计数据(如精度和模型参数).现在我正在处理auto.arima函数生成的错误.更确切地说; 由OCSB季节性测试引起的.

我将此功能用于"月度"时间序列以及"每周"时间序列.对于月度时间序列,a没有问题(几乎50000,包括很多'零'值).随着每周的时间序列我遇到了问题.但我无法找到错误的真正原因.

我试图重新创建错误.我认为它与很多0(或相同)值结合52频率周期有关.但我仍然无法指出这个问题.

请参阅以下示例.一些信息:时间序列集是每周值(freq = 52),从2010年开始,第1周.长度为122个样本(直到2012年,第18周).因此我测试了长度为122,为此我可以生成错误.我仍然认为这与频率和'运行相同的值'有关...

对于某些人来说,会产生错误,有些人则没有.

例1 [随机数,长度= 122]>没问题:

ts_element <- ts(sample(0:30, 122, replace=TRUE), frequency = 52, start = c(2010, 1))
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
Run Code Online (Sandbox Code Playgroud)

示例2 [仅0值,长度= 122]> OCSB测试错误(通常我会假设一个不同的错误...参见示例3):

ts_element <- ts(sample(0:0, 122, replace=TRUE), frequency = 52, start = c(2010, 1))
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
Error in OCSBtest(x, m) : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)

示例3 [仅0值,长度= 100]>'零/相等值'错误,我假设这一个,这个例子不是问题,而是指出长度是相关的(与例2比较):

ts_element <- ts(sample(0:0, 100, replace=TRUE), frequency = 52, …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
3627
查看次数

使用动态前置零点调整数据集中的因子

我有一个大data.frame(1.9M记录,20列).其中一列是因子列,其值为不同长度的数字(不同的字符/数字,例如567839,234324324,3243211等)注意:这些是数字代码,没有实际值,也可能只是不同的字符这个例子的长度.

现在我想将因子转换为13位数因子,以便在数字位数小于13的情况下,因子得到前导零.

例:

Old factor      Length  New factor
432543532532    12      0432543532532
3285087250932   13      3285087250932
464577534       9       0000464577534
2225324324324   13      2225324324324
864235325264    12      0864235325264
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的方法,但现在我卡住了.问题在于整个数据集中因子的长度不同.

我试着用一个例子来尝试以下内容.

data.frame使用我执行代码的三个不同列创建,以识别问题.

> df.test <- as.data.frame(cbind(c("432543532532", "3285087250932", "464577534", "2225324324324", "864235325264"), c("3285087250932", "132543532532", "464577534", "2225324324324", "864235325264"), c("164577534", "3285087250932", "432543532532", "2225324324324", "864235325264")))
> df.test
             V1            V2            V3
1  432543532532 3285087250932     164577534
2 3285087250932  132543532532 3285087250932
3     464577534     464577534  432543532532
4 2225324324324 2225324324324 2225324324324
5  864235325264  864235325264  864235325264

> levels(df.test$V1) <- paste(substr("0000000000000", 0, 13 - nchar(as.character(levels(df.test$V1)))), …
Run Code Online (Sandbox Code Playgroud)

r r-factor

0
推荐指数
1
解决办法
158
查看次数

标签 统计

r ×6

forecasting ×1

r-factor ×1

read.table ×1

save ×1