如何解决R中类似变量的相关性
我已经稍微修改了数据表。
我想在数据集中将变量与相似名称相关联
A_y B_y C_y A_p B_p C_p
1 15 52 32 30 98 56
2 30 99 60 56 46 25
3 10 25 31 20 22 30
..........
n 55 23 85 12 34 52
我想获得相关性
- A_y-A_p:0.78
- B_y-B_p:0.88
- C_y-C_p:0.93
如何在R中做到这一点?有可能吗?
解决方法
这真的很危险。语言定义未定义具有无效列名的data.frame的行为。重复的列名无效。
您应该重组输入数据。无论如何,这是一种处理您的输入数据的方法。
DF <- read.table(text = " A B C A B C
1 15 52 32 30 98 56
2 30 99 60 56 46 25
3 10 25 31 20 22 30",header = TRUE,check.names = FALSE)
sapply(unique(names(DF)),function(s) do.call(cor,unname(DF[,names(DF) == s])))
# A B C
#0.9995544 0.1585501 -0.6004010
#compare:
cor(c(15,30,10),c(30,56,20))
#[1] 0.9995544
,
这是另一个基本的R选项
within(
rev(
stack(
Map(
function(x) do.call(cor,unname(x)),split.default(df,unique(gsub("_.*","",names(df))))
)
)
),ind <- sapply(
ind,function(x) {
paste0(grep(paste0("^",x),names(df),value = TRUE),collapse = "-"
)
}
)
)
给出
ind values
1 A_y-A_p 0.9995544
2 B_y-B_p 0.1585501
3 C_y-C_p -0.6004010
数据
df <- structure(list(A_y = c(15L,30L,10L),B_y = c(52L,99L,25L),C_y = c(32L,60L,31L),A_p = c(30L,56L,20L),B_p = c(98L,46L,22L),C_p = c(56L,25L,30L)),class = "data.frame",row.names = c("1","2","3"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。