如何提取表中的参数模型?

How extract parameter model intable?

我正在尝试从 table 中提取不同的参数并将它们分别放在一列中。我试过了,但是没有用。

这是例子

  Models = c("ARIMA(1,0,10)(80,0,90)[12] with non-zero mean",
           "ARIMA(2,0,11) with non-zero mean",
           "ARIMA(3,0,12)(81,0,91)[12] with non-zero mean",
           "ARIMA(4,0,13)(82,0,92)[12] with non-zero mean",
           "ARIMA(5,0,14) with zero mean",
           "ARIMA(6,0,15) with non-zero mean")

Models = as.data.frame(Models)

我需要在不同的列中分隔每个参数 这个想法是将它分开如下

   Name p d  q   P   D   Q  PERIOD  MEAN
1 ARIMA 1 0 10  80   0  90   12     with non-zero mean
2 ARIMA 2 0 11 N/a N/a N/a   N/a    with non-zero mean
3 ARIMA 3 0 12  81   0  91   12     with non-zero mean
4 ARIMA 4 0 13  82   0  92   12     with non-zero mean
5 ARIMA 5 0 14 N/a N/a N/a   N/a    with zero mean
6 ARIMA 6 0 15 N/a N/a N/a   N/a    with non-zero mean

有没有办法自动分离? 我是 R 的新手,我研究过但找不到解决方案

注意:示例中的模型不是真实的,只是为了识别参数

我认为您将不得不自己构建一些东西。首先,尝试(*从 Models 字符向量 版本开始,即在转换为数据框之前 - 或者,如果您已经有数据框,请使用 Models[[1]] 而不是第一步中的 Models

m <- gsub("with (.*) mean","with_\1_mean",Models)
mm <- strsplit(m, "[(), ]")

这首先将“with zero/non-zero mean”中的空格转换为下划线,然后在集合 (), .

中找到字符的任何地方拆分字符串

您可以使用 lengths(mm) 来判断 P/D/Q/period 是否存在(如果存在则值为 10,否则为 6)。像

这样笨重的东西
insert_na <- function(x) c(x[1:5], rep(NA,4), x[6])
mm[lengths(mm)==6] <- lapply(mm[lengths(mm==6)], insert_na)

可能有用,虽然我还没有测试过。

在正确的位置插入 NA 值后,您可以执行类似

的操作
do.call(rbind,mm[sapply(mm, length) == 10])

将它们放在一起(这里我子集只包括长度为 10 的值)。然后你可能想把结果变成一个数据框,并将适当的列转换为数字......还有其他清理工作要做(删除虚假字符,添加列名等)

我不确定它在您的原始数据集上的表现如何,但在这里似乎工作正常:

library(dplyr)
library(stringr)
library(tidyr)

Models %>%
  as_tibble() %>%
  mutate(Mean = str_extract(value, "(?<=\s)[^d]+"),
         value = gsub("\s[^d]+", "", value), 
         value = gsub("[)(,]", " ", value, perl = TRUE),
         value = gsub("[\[\]]", "", value, perl = TRUE)) %>%
  separate(value, into = c("Name", "p", "d", "q", "P", "D", "Q", "Period"), sep = "\s+") %>%
  mutate(across(p:Q, ~ replace(., . == (""), NA)))

# A tibble: 6 x 9
  Name  p     d     q     P     D     Q     Period Mean              
  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>  <chr>             
1 ARIMA 1     0     10    80    0     90    12     with non-zero mean
2 ARIMA 2     0     11    NA    NA    NA    NA     with non-zero mean
3 ARIMA 3     0     12    81    0     91    12     with non-zero mean
4 ARIMA 4     0     13    82    0     92    12     with non-zero mean
5 ARIMA 5     0     14    NA    NA    NA    NA     with zero mean    
6 ARIMA 6     0     15    NA    NA    NA    NA     with non-zero mean