在R中计算NAME列各值与INC列的相关性求助
解决R中NAME列与INC列相关性计算问题
首先明确你现有代码的核心问题:DATA_QD[-c(1,19)]排除了NAME列(第1列)和INC列(第19列),因此cor()计算的是剩余列的相关矩阵,自然无法得到你需要的NAME与INC的相关性。
根据你的需求,分三种常见场景给出解决方案:
场景1:NAME是数值型变量,直接计算两列相关
如果NAME是数值列,直接提取这两列计算相关系数即可:
# 方式1:用列索引(NAME=第1列,INC=第19列) round(cor(DATA_QD[, c(1, 19)]), digits = 2) # 方式2:用列名更直观(推荐) round(cor(DATA_QD$NAME, DATA_QD$INC), digits = 2)
场景2:NAME是分类变量,按组计算相关性
如果NAME是分类变量(如不同组别、类别),需要按NAME分组后,计算组内某变量与INC的相关性,可使用dplyr实现:
# 先加载dplyr包 library(dplyr) # 示例:计算每个NAME组内,VAR列与INC列的相关系数 DATA_QD %>% group_by(NAME) %>% summarise(inc_correlation = round(cor(VAR, INC), digits = 2))
如果需要将每个NAME类别对应的INC向量,与另一全局向量(如某参考列)计算相关性,可拆分数据后批量计算:
# 按NAME拆分INC列数据 inc_groups <- split(DATA_QD$INC, DATA_QD$NAME) # 假设参考向量为REF_COL(替换为你的目标列名) ref_vector <- DATA_QD$REF_COL # 批量计算每个组的INC与参考向量的相关 sapply(inc_groups, function(x) { # 匹配对应位置的参考向量值 matched_ref <- ref_vector[names(x)] round(cor(x, matched_ref), digits = 2) })
场景3:数据为长格式(NAME是变量名)
如果你的数据是长格式(即NAME列存储的是变量名称,每行对应一个变量的单个观测值),需要先转为宽格式再计算:
library(tidyr) # 转换为宽格式(假设ID列用于标识同一观测的不同变量) wide_data <- DATA_QD %>% pivot_wider(names_from = NAME, values_from = VALUE) # 计算所有NAME变量与INC列的相关矩阵 round(cor(wide_data[, c(unique(DATA_QD$NAME), "INC")]), digits = 2)
内容的提问来源于stack exchange,提问作者Dang Nguyen Khoa
相关产品推荐
相关产品推荐

