R: Как можно переименовать имя столбца из 5 data.frames с 35 столбцами одновременно?

Я использую приведенный ниже код R для моделирования данных временных рядов, если быть точным, скользящего среднего порядка 1. Я меняю 3 переменные:

N = количество элементов в серии c(15L, 20L, 30L, 50L, 100L) SD = стандартное отклонение c(1, 2, 3, 4, 5) ^ 2 тета = значение \theta c(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99) У меня есть 5 фреймов данных, которые вы увидите как файлы .csv в вашем рабочем каталоге R. Каждый data.frame имеет 35 столбцов, которые я хочу правильно пометить.

MWE

N <- c(15L, 20L, 30L, 50L, 100L)
SD = c(1, 2, 3, 4, 5) ^ 2
theta = c(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)

res <- vector('list', length(N))
names(res) <- paste('N', N, sep = '_')

set.seed(123L)
for (i in seq_along(N)){
  res[[i]] <- vector('list', length(SD))
  names(res[[i]]) <- paste('SD', SD, sep = '_')

  ma <- matrix(NA_real_, nrow = N[i], ncol = length(theta)) 

  for (j in seq_along(SD)){
    wn <- rnorm(N[i], mean = 0, sd = SD[j])
    ma[1:2, ] <- wn[1:2]

    for (k in 3:N[i]){
      ma[k, ] <- wn[k - 1L] * theta + wn[k]
        }
    colnames(ma) <- paste('ma_theta', theta, sep = '_')
    res[[i]][[j]] <- ma
  }
}

res1 <- lapply(res, function(dat) do.call(cbind,  dat))
sapply(names(res1), function(nm) write.csv(res1[[nm]], 
                                       file = paste0(nm, ".csv"), row.names = FALSE, quote = FALSE))

Я хочу, чтобы имя столбца было меткой не только в отношении тета, но и в отношении SD.

Я хочу, чтобы имя столбца было помечено, как показано ниже. Я не хочу, чтобы 2 или более столбца имели одинаковую метку. Я хочу, чтобы ma_SD_1...theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)) исчерпался до ma_SD_4...theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)) до ma_SD_9...theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)) до ma_SD_16...theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)) до ma_SD_25...theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)).

ma_SD_1_theta_0.2, ma_SD_1_theta_0.4, ma_SD_1_theta_0.6, ma_SD_1_theta_0.8, ma_SD_1_theta_0.9, ma_SD_1_theta_0.95, ma_SD_1_theta_0.99

ma_SD_4_theta_0.2, ma_SD_4_theta_0.4, ma_SD_4_theta_0.6, ma_SD_4_theta_0.8, ma_SD_4_theta_0.9, ma_SD_4_theta_0.95, ma_SD_4_theta_0.99

ma_SD_9_theta_0.2, ma_SD_9_theta_0.4, ma_SD_9_theta_0.6, ma_SD_9_theta_0.8, ma_SD_9_theta_0.9, ma_SD_9_theta_0.95, ma_SD_9_theta_0.99

ma_SD_1_theta_0.2, ma_SD_16_theta_0.4, ma_SD_16_theta_0.6, ma_SD_16_theta_0.8, ma_SD_16_theta_0.9, ma_SD_16_theta_0.95, ma_SD_16_theta_0.99

person Daniel James    schedule 31.01.2020    source источник
comment
Если вам нужны разъяснения, пожалуйста, дайте мне знать   -  person Daniel James    schedule 31.01.2020
comment
попробуй colnames(ma) <- paste('ma_SD',SD[j],'theta', theta, sep = '_')   -  person Laurence_jj    schedule 31.01.2020


Ответы (1)


Это должно делать это, когда вы выполняете итерацию (используя j) по SD:

colnames(ma) <- paste('ma_SD',SD[j],'theta', theta, sep = '_')
person Laurence_jj    schedule 31.01.2020