在R中创建相关矩阵:特定行选取与衍生变量问题求助
解决R中选取特定行、新增均值变量及生成相关矩阵的问题
没问题,我来帮你一步步搞定这个任务!我们分四个核心步骤来操作:
1. 将你的样本数据转换为可处理的数据框
首先,我们需要把你提供的长串文本数据转换成R能识别的数据框。这里假设你的每行有50个变量(你可以根据实际列数调整ncol的值):
# 把你的原始数据复制进来 raw_data <- "NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.1577, NA, 0.2197, NA, 0.348, NA, 0.086, NA, NA, NA, NA, NA, NA, NA, NA, 0.3768, NA, 0.2163, NA, 0.336, NA, 0.329, NA, NA, NA, NA, NA, NA, NA, NA, 0.2881, NA, 0.0632, NA, 0.235, NA, 0.167, NA, NA, NA, NA, NA, NA, NA, NA, 0.2076, NA, 0.3705, NA, 0.164, NA, 0.255, NA, NA, NA, NA, NA, NA, NA, NA, 0.1795, NA, 0.3649, NA, 0.246, NA, 0.628, NA, NA, NA, NA, NA, NA, NA, NA, 0.0227, NA, 0.3975, NA, 0.176, NA, 0.13, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.6333, NA, 0.3627, NA, 0.603, NA, 0.408, NA, NA, NA, NA, NA, NA, NA, NA, 0.6667, NA, 0.8889, NA, 0.6, NA, 0.6, NA, NA, NA, NA, NA, NA, NA, NA, 0.0545, NA, 0.2547, NA, 0.431, NA, 0.126, NA, NA, NA, NA, NA, NA, NA, NA, 0.2388, NA, 0.5514, NA, 0.32, NA, 0.424, NA, NA, NA, NA, NA, NA, NA, NA, 0.6667, NA, 0.3867, NA, 0.313, NA, 0.75, NA, NA, NA, NA, NA, NA, NA, NA, 0.752, NA, 0.482, NA, 0.349, NA, 0.24, NA, NA, NA, NA, NA, NA, NA, NA, 0.5161, NA, 0.641, NA, 0.643, NA, 0.438, NA, NA, NA, NA, NA, NA, NA, NA, 0.3492, NA, 0.3, NA, 0.391, NA, 0.645, NA, NA, NA, NA, NA, NA, NA, NA, 0.3531, NA, 0.5755, NA, 0.667, NA, 0.751, NA, NA, NA, NA, NA, NA, NA, NA, 0.2941, NA, 0.5119, NA, 0.294, NA, 0.526, NA, NA, NA, NA, NA, NA, NA, NA, 0.2941, NA, 0.1515, NA, 0.3, NA, 0.124, NA, NA, NA, " # 拆分字符串并转换成数值向量 values <- strsplit(raw_data, ", ")[[1]] values <- as.numeric(values) # 转换为数据框,ncol设置为你的实际列数 df <- as.data.frame(matrix(values, ncol = 50, byrow = TRUE)) # 给列命名,方便后续操作 colnames(df) <- paste0("Var", 1:50)
2. 从数据集中选取特定的8行
直接使用行索引就能轻松选取你需要的行,把c()里的数字替换成你实际要选的行号即可:
# 示例:选取第1、3、5、7、9、11、13、15行,替换成你需要的行号 selected_rows <- df[c(1, 3, 5, 7, 9, 11, 13, 15), ]
3. 添加由两行(或两列)均值得到的变量
这里分两种常见场景,你可以根据需求选择:
场景A:新增一个列,该列是现有两列的均值
比如你的数据里Var39和Var41有有效数值,我们可以计算这两列的均值作为新变量:
# 计算Var39和Var41的均值,忽略NA值,新增为Mean_Columns列 selected_rows$Mean_Columns <- rowMeans(selected_rows[, c("Var39", "Var41")], na.rm = TRUE)
场景B:新增一行,该行是现有两行的均值
如果你想基于已选的某两行生成一个均值行,添加到数据框中:
# 示例:计算第1行和第2行的列均值,生成新行 mean_row <- colMeans(selected_rows[c(1, 2), ], na.rm = TRUE) # 将新行添加到数据框末尾 selected_rows <- rbind(selected_rows, mean_row)
4. 生成相关矩阵
最后用cor()函数计算相关矩阵,注意设置use参数处理NA值:
# 计算相关矩阵,仅使用成对完整的观测值 cor_matrix <- cor(selected_rows, use = "pairwise.complete.obs") # (可选)用corrplot包美化可视化 # install.packages("corrplot") # 如果没安装先运行这个 library(corrplot) corrplot(cor_matrix, method = "circle", tl.cex = 0.7) # tl.cex调整标签大小
这样你就完成了从选行、新增变量到生成相关矩阵的全部操作啦!
内容的提问来源于stack exchange,提问作者Kristijonas Medelis
相关产品推荐
相关产品推荐

