R:如何一次重命名 5 data.frames 的列名,每列有 35 列?
R: How can one rename columnname of 5 data.frames with 35 columns each at once?
我正在使用下面的 R 代码来模拟时间序列数据,准确地说是 1 阶移动平均线。我正在改变 3 个变量,它们是:
N = 系列中的元素数 c(15L, 20L, 30L, 50L, 100L)
SD = 标准偏差 c(1, 2, 3, 4, 5) ^ 2
theta = \theta
值 c(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
我有 5 个 data.frames,您将在 R 工作目录中将其视为 .csv 文件。每个 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))
我希望列名不仅与 theta 相关而且与 SD 相关。
我希望列名的标签如下所示。我不希望 2 个或更多列具有相同的标签。我希望ma_SD_1...
(with theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
)在ma_SD_4...
之前(with theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
)在ma_SD_9...
之前(with theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
)在[=23之前] =](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
这应该在您在 SD 上迭代(使用 j
)时执行:
colnames(ma) <- paste('ma_SD',SD[j],'theta', theta, sep = '_')
我正在使用下面的 R 代码来模拟时间序列数据,准确地说是 1 阶移动平均线。我正在改变 3 个变量,它们是:
N = 系列中的元素数 c(15L, 20L, 30L, 50L, 100L)
SD = 标准偏差 c(1, 2, 3, 4, 5) ^ 2
theta = \theta
值 c(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
我有 5 个 data.frames,您将在 R 工作目录中将其视为 .csv 文件。每个 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))
我希望列名不仅与 theta 相关而且与 SD 相关。
我希望列名的标签如下所示。我不希望 2 个或更多列具有相同的标签。我希望ma_SD_1...
(with theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
)在ma_SD_4...
之前(with theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
)在ma_SD_9...
之前(with theta=(0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99)
)在[=23之前] =](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
这应该在您在 SD 上迭代(使用 j
)时执行:
colnames(ma) <- paste('ma_SD',SD[j],'theta', theta, sep = '_')