如何将两个同维度R DataFrame按索引位置合并为12个命名向量?
解决R数据框按行列索引合并生成指定命名向量的问题
嘿,我来帮你搞定这个需求!咱们要把两个同维度的R数据框DF1和DF2,按行列索引位置合并,生成12个分别对应每个行列位置的向量,每个向量的名字要体现来源的行列索引,比如a2对应DF1和DF2中第2行a列的值组合。
第一步:先定义好原始数据框
首先咱们先把题目里的DF1和DF2用R代码还原出来:
# 构建DF1 DF1 <- data.frame( a = c(0.671, 0.446, 0.624), b = c(0.105, -0.243, 0.075), c = c(0.181, 0.051, -0.451), d = c(0.241, 1.577, -0.212), row.names = c(2, 3, 5) ) # 构建DF2 DF2 <- data.frame( a = c(3.672, 4.445, 2.621), b = c(7.204, -0.242, 0.375), c = c(-0.164, 0.025, -0.468), d = c(3.251, 1.627, -4.762), row.names = c(2, 3, 5) )
第二步:生成所有行列组合并提取值
接下来咱们要遍历每一个列名和行索引的组合,从两个数据框里取出对应的值,组合成向量并命名:
方法一:用循环实现(直观易懂)
# 获取所有列名和行索引 cols <- colnames(DF1) rows <- rownames(DF1) # 生成所有行列的组合 combos <- expand.grid(col = cols, row = rows, stringsAsFactors = FALSE) # 初始化空列表存储结果 result_list <- list() # 逐个处理每个组合 for (i in 1:nrow(combos)) { current_col <- combos$col[i] current_row <- combos$row[i] # 从两个数据框提取对应位置的值,组成向量 combined_vec <- c(DF1[current_row, current_col], DF2[current_row, current_col]) # 给向量所在的列表元素命名(比如a2、b2) result_list[[paste0(current_col, current_row)]] <- combined_vec }
方法二:用lapply简化代码(更简洁)
如果觉得循环麻烦,也可以用lapply来简化:
cols <- colnames(DF1) rows <- rownames(DF1) combos <- expand.grid(col = cols, row = rows, stringsAsFactors = FALSE) result_list <- lapply(1:nrow(combos), function(i) { c(DF1[combos$row[i], combos$col[i]], DF2[combos$row[i], combos$col[i]]) }) # 给列表里的每个向量命名 names(result_list) <- paste0(combos$col, combos$row)
第三步:验证结果
运行完代码后,你就可以通过列表名加向量名来查看结果啦,比如:
# 查看a2向量 result_list$a2 # 输出:[1] 0.671 3.672 # 查看d5向量 result_list$d5 # 输出:[1] -0.212 -4.762
这样就完全符合你的需求啦,所有12个向量都按要求命名,每个向量包含对应行列位置来自DF1和DF2的两个值。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

