You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中从DataFrame创建指定维度的四维数组?

在R中从多变量DataFrame创建四维数组

实现步骤

要构建符合num_ids * num_variables * num_months * num_years维度的数组,需先整合多变量数据集、明确各维度的有序取值,再完成数组填充,具体操作如下:


1. 修正并准备示例数据

注意:cbind()返回的是字符矩阵,需转换为数据框并确保数值列类型正确。同时模拟第二个变量的数据集(对应你提到的多个结构相同的数据集):

# 第一个变量(km)的数据集
ids <- c(1:8)
months <- c('10','11','12','01','02','10','11','12')
years <- c('2019','2020','2021','2022','2019','2020','2021','2022')
km <- c(3456, 54654, 76765, 57676, 8689, 87989, 8632, 42325)
df_km <- data.frame(ids, months, years, km = as.numeric(km))

# 模拟第二个变量(fuel)的数据集
fuel <- c(120, 450, 600, 520, 150, 780, 100, 380)
df_fuel <- data.frame(ids, months, years, fuel = as.numeric(fuel))

2. 整合多变量数据集为长格式

将多个变量的数据集合并,并转换为长格式,方便后续映射到数组维度:

library(dplyr)
library(tidyr)

# 合并并转长格式
combined_df <- bind_rows(
  df_km %>% pivot_longer(cols = km, names_to = "variable", values_to = "value"),
  df_fuel %>% pivot_longer(cols = fuel, names_to = "variable", values_to = "value")
)

3. 定义各维度的有序取值

明确数组四个维度的唯一值,注意月份需按实际时间顺序排序(而非字符串字典序):

# 各维度的有序唯一值
unique_ids <- sort(unique(combined_df$ids))
unique_vars <- unique(combined_df$variable)
# 按1-12月顺序排列月份
unique_months <- c('01','02','10','11','12')
unique_years <- sort(unique(combined_df$years))

4. 创建并填充四维数组

先初始化带维度名称的空数组,再通过循环将数据映射到对应位置:

# 初始化四维数组
four_d_array <- array(
  data = NA,
  dim = c(length(unique_ids), length(unique_vars), length(unique_months), length(unique_years)),
  dimnames = list(
    id = unique_ids,
    variable = unique_vars,
    month = unique_months,
    year = unique_years
  )
)

# 填充数组内容
for (i in seq_len(nrow(combined_df))) {
  row_data <- combined_df[i, ]
  # 找到当前行对应各维度的索引
  id_pos <- which(unique_ids == row_data$ids)
  var_pos <- which(unique_vars == row_data$variable)
  month_pos <- which(unique_months == row_data$months)
  year_pos <- which(unique_years == row_data$years)
  
  # 赋值到数组对应位置
  four_d_array[id_pos, var_pos, month_pos, year_pos] <- row_data$value
}

5. 验证结果

可以通过以下方式查看数组结构和内容:

# 查看数组维度
dim(four_d_array)
# 查看id=1、变量km的所有月份-年份数据
four_d_array["1", "km", , ]

内容的提问来源于stack exchange,提问作者virginia_wolff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:42:36