2016-05-23 41 views
-2

我有两个命名的向量A和B.我必须计算它们之间的相关性,删除A和B都为0的条目。也就是说,如果对于某个名称'Sample1',值在A和B都是0,那么我想从相关性计算中删除那个条目。删除零后计算相关

有没有办法轻松做到这一点?我正在使用cor(A, B)来计算相关性。

回答

2

这个怎么样?

# construct vectors 
set.seed(1234) 
A <- sample(0:10, 100, replace=T) 
B <- sample(0:10, 100, replace=T) 

# remove elements of A and B where both are 0 
cor(A[A != 0 | B != 0], B[A !=0 | B != 0]) 

或者,更连贯对自己此刻

cor(A[!(A == 0 & B == 0)], B[!(A ==0 & B == 0)]) 
-2

你只需要稍微tweek您的代码:

cor(A, B, na.rm=T) 

na.rm = T告诉它删除缺失值。

+2

该OP是询问有关删除*零*值,而不是'NA'值... –

3

如果你的数据是在一个data.frame,df,你可以使用subset功能:

df <- data.frame(A, B) 
with(subset(df, !(A == 0 & B == 0)), cor(A,B)) 
+2

这个问题已经证明真实表是多么有用...... – bouncyball

1

另一个选项是rowSums,创建一个逻辑索引并执行cor

with(df[!!rowSums(df),], cor(A,B))