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

如何将R语言Data Frame转换为matrix/array类型?

问题:将含日期列的数据框转换为matrix/array对象

我读取了如下的R语言数据框df:

df <- read.csv("https://raw.githubusercontent.com/Leprechault/trash/refs/heads/main/Dados_C3_data_planta.csv", sep=";")
head(df)

输出结果:

#        Data GLY_PN CRO_P MIPU_P CEN_P POA01_P CECRO_P COM_P MOR_PN
#1 24-01-2024     53    40      3     0       0       0     0      0
#2 25-01-2024     56     8      0    24       9       0     0      0
#3 26-01-2024      0    27      0    47      26       0     0      0
#4 27-01-2024      0     0      0     0       0       6    43     48
#5 31-01-2024      0     0      0    62      35       0     0      0
#6 02-02-2024      0     0      0    50      50       0     0      0
#  COPA_PN RHY_P SOR_P
#1       0     0     0
#2       0     0     0
#3       0     0     0
#4       0     0     0
#5       0     0     0
#6       0     0     0

我需要将它转换为类为[1] "matrix" "array"的对象df_to_matrix,要求:

  • 保留原格式,第一列为原Data列的日期内容
  • 其余列保持数值格式
  • 试过as.matrix()和data.matrix()都没成功,期望输出的结构如下:
#                GLY_PN CRO_P MIPU_P CEN_P POA01_P CECRO_P COM_P MOR_PN
#1 24-01-2024     53    40      3     0       0       0     0      0
#2 25-01-2024     56     8      0    24       9       0     0      0
#3 26-01-2024      0    27      0    47      26       0     0      0
#4 27-01-2024      0     0      0     0       0       6    43     48
#5 31-01-2024      0     0      0    62      35       0     0      0
#6 02-02-2024      0     0      0    50      50       0     0      0
#  COPA_PN RHY_P SOR_P
#1       0     0     0
#2       0     0     0
#3       0     0     0
#4       0     0     0
#5       0     0     0
#6       0     0     0

class(df_to_matrix)
[1] "matrix" "array"

解决方案

问题出在as.matrix()会把所有列转成字符型(因为第一列是日期字符),而data.matrix()会把日期列转成数值(丢失日期格式)。要实现需求,可按以下两种方法处理:

方法1:将日期设为行名,矩阵保留数值列

这种方法下矩阵全为数值型,结构简洁:

# 提取日期作为行名
rownames(df) <- df$Data
# 移除原Data列,转换为矩阵
df_to_matrix <- as.matrix(df[, -1])
# 查看类
class(df_to_matrix)

输出:

[1] "matrix" "array"

查看结构:

head(df_to_matrix)

输出:

#           GLY_PN CRO_P MIPU_P CEN_P POA01_P CECRO_P COM_P MOR_PN COPA_PN RHY_P SOR_P
#24-01-2024     53    40      3     0       0       0     0      0       0     0     0
#25-01-2024     56     8      0    24       9       0     0      0       0     0     0
#26-01-2024      0    27      0    47      26       0     0      0       0     0     0
#27-01-2024      0     0      0     0       0       6    43     48       0     0     0
#31-01-2024      0     0      0    62      35       0     0      0       0     0     0
#02-02-2024      0     0      0    50      50       0     0      0       0     0     0

方法2:保留第一列为字符型,其余为数值型的矩阵

如果必须保留第一列是日期(而非行名),可手动构建矩阵:

# 创建空矩阵,行数、列数与原数据框一致
df_to_matrix <- matrix(nrow = nrow(df), ncol = ncol(df))
# 设置列名
colnames(df_to_matrix) <- colnames(df)
# 填充第一列日期(字符型)
df_to_matrix[, 1] <- df$Data
# 填充其余数值列
df_to_matrix[, -1] <- as.matrix(df[, -1])
# 查看类
class(df_to_matrix)

输出:

[1] "matrix" "array"

查看结构:

head(df_to_matrix)

输出:

#     Data       GLY_PN CRO_P MIPU_P CEN_P POA01_P CECRO_P COM_P MOR_PN COPA_PN RHY_P SOR_P
#[1,] "24-01-2024" "53"  "40"  "3"    "0"   "0"     "0"     "0"   "0"    "0"     "0"   "0"  
#[2,] "25-01-2024" "56"  "8"   "0"    "24"  "9"     "0"     "0"   "0"    "0"     "0"   "0"  
#[3,] "26-01-2024" "0"   "27"  "0"    "47"  "26"    "0"     "0"   "0"    "0"     "0"   "0"  
#[4,] "27-01-2024" "0"   "0"   "0"    "0"   "0"     "6"     "43"  "48"   "0"     "0"   "0"  
#[5,] "31-01-2024" "0"   "0"   "0"    "62"  "35"    "0"     "0"   "0"    "0"     "0"   "0"  
#[6,] "02-02-2024" "0"   "0"   "0"    "50"  "50"    "0"     "0"   "0"    "0"     "0"   "0"  

注意:这种情况下矩阵整体为字符型,但视觉上符合需求,且类为matrix/array。若需数值列保持数值型,只能采用方法1(因为矩阵仅支持单一数据类型)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:13:16