鉴于我们已经
j<-c("a","b","c","d")
l<-expand.grid(j,j)
print(l)
Var1 Var2
1 a a
2 b a
3 c a
4 d a
5 a b
6 b b
7 c b
8 d b
9 a c
10 b c
11 c c
12 d c
13 a d
14 b d
15 c d
16 d d
我想只返回唯一的条目,例如:
print(newl)
Var1 Var2
a a
a b
a c
a d
b b
b c
b d
c c
c d
d d
我找到了许多答案,其中包含变量的唯一组合,但变量不会跨越列。
这一切都来自于做corr.test {psych}并使用as.vector(corr.test $ r)将corr.test $ r展开到单个向量中。
要获得那些基于我使用的相关性
names<-expand.grid(rownames(corr.test$r),colnames(corr.test$r))
最终与“展开”的结构保持一致。来自as.vector的r矩阵。
但它返回整个矩阵(上下三角形)。所以我正在寻找一种方法来只采用唯一的相关性(data.frame的一半)。
答案 0 :(得分:4)
combn
函数会为您提供所有n
- 向量中元素的组合,但它与自身的元素不匹配。您可以非常轻松地添加该结果,因此您可以使用
cbind(combn(j,2), rbind(j,j))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# j "a" "a" "a" "b" "b" "c" "a" "b" "c" "d"
# j "b" "c" "d" "c" "d" "d" "a" "b" "c" "d"
答案 1 :(得分:1)
您可以重新整形数据以避免此
library(psych)
library(reshape2)
# example data
dat <- mtcars[1:4]
# For all correlations
melt(corr.test(dat)$r)
# For unique correlations
out <- corr.test(dat)$r
out[upper.tri(out)] <- NA
melt(out, na.rm=TRUE)
Var1 Var2 value
# 1 mpg mpg 1.0000000
# 2 cyl mpg -0.8521620
# 3 disp mpg -0.8475514
# 4 hp mpg -0.7761684
# 6 cyl cyl 1.0000000
# 7 disp cyl 0.9020329
# 8 hp cyl 0.8324475
# 11 disp disp 1.0000000
# 12 hp disp 0.7909486
# 16 hp hp 1.0000000
答案 2 :(得分:0)
您可以做的一件事是将答案放在一个数组中,使用Var1作为键,将Var2作为值,然后将这些对添加到临时数组中,如果临时数组中尚不存在该对。
答案 3 :(得分:0)
感谢您的回答。
我最后拍了一张照片,这就是我想出的:
j<-c("a","b","c","d")
l<-expand.grid(j,j)
twist<-function(l){
l<-subset(l,l[,1]!=l[,2])
leng<-length(l[,1])/2
for (i in 1:leng) {
g1<-l[,1]
g2<-l[,2]
g1[i]<-l[i,2]
g2[i]<-l[i,1]
l[,1]<-g1
l[,2]<-g2
l<-unique(l[c("Var1", "Var2")])
}
return(l)
}
k<-twist(l)
print(k)
Var1 Var2
2 a b
3 a c
4 a d
7 b c
8 b d
12 c d
我打电话给'扭曲&#39;原因很明显。随意批评它。