如何从含LULC数据的矩阵生成带新行名的列表
LULC矩阵转类型组合-值列表的实现方法
注意:原输入矩阵中第二行的行名「Second」应为笔误,对应目标列表的「Trees」,以下方法均基于修正后的行名(Water、Trees、Building)进行。
方法1:Excel手动处理(适合小数据集)
- 修正原矩阵的行名为
Water、Trees、Building - 新建两列,分别命名为类型组合和Value
- 根据目标格式的对应关系,逐个填写内容:
Water-Water→ 20(原Water行Water列数值)Water-Trees→70(原Trees行Water列数值)Water-Building→10(原Building行Water列数值)Trees-Trees→10(原Trees行Trees列数值)Trees-Water→80(原Water行Trees列数值)Trees-Building→10(原Building行Trees列数值)Building-Water→10(原Building行Water列数值)Building-Trees→10(原Building行Trees列数值)Building-Building→30(原Building行Building列数值)
方法2:Python pandas自动化处理(适合大数据集)
使用pandas的重塑功能快速转换,代码如下:
import pandas as pd # 构建修正后的原矩阵数据 data = { 'Water': [20, 70, 10], 'Trees': [80, 10, 10], 'Building': [60, 10, 30] } df = pd.DataFrame(data, index=['Water', 'Trees', 'Building']) # 转换为长格式并生成类型组合列 melted = df.unstack().reset_index() melted.columns = ['原列名', '原行名', 'Value'] melted['类型组合'] = melted['原列名'] + '-' + melted['原行名'] # 按目标顺序筛选整理(无需特定顺序可跳过此段) target_order = [ 'Water-Water', 'Water-Trees', 'Water-Building', 'Trees-Trees', 'Trees-Water', 'Trees-Building', 'Building-Water', 'Building-Trees', 'Building-Building' ] result = melted[melted['类型组合'].isin(target_order)].set_index('类型组合')[['Value']].loc[target_order] # 输出结果 print(result)
执行后将直接输出符合要求的列表格式。
方法3:R语言自动化处理(适合大数据集)
使用tidyr包的重塑功能实现,代码如下:
# 构建修正后的原矩阵数据 df <- data.frame( Water = c(20, 70, 10), Trees = c(80, 10, 10), Building = c(60, 10, 30), row.names = c("Water", "Trees", "Building") ) # 加载tidyr包(未安装需先执行install.packages("tidyr")) library(tidyr) # 转换为长格式并生成类型组合列 melted <- pivot_longer(df, cols = everything(), names_to = "原列名", values_to = "Value") melted$原行名 <- rownames(df)[rep(1:nrow(df), ncol(df))] melted$类型组合 <- paste(melted$原列名, melted$原行名, sep = "-") # 按目标顺序筛选整理(无需特定顺序可跳过此段) target_order <- c( "Water-Water", "Water-Trees", "Water-Building", "Trees-Trees", "Trees-Water", "Trees-Building", "Building-Water", "Building-Trees", "Building-Building" ) result <- melted[melted$类型组合 %in% target_order, ] result <- result[match(target_order, result$类型组合), ] result <- result[, c("类型组合", "Value")] rownames(result) <- result$类型组合 result$类型组合 <- NULL # 输出结果 print(result)
内容的提问来源于stack exchange,提问作者findingnemo
相关产品推荐
相关产品推荐

