我正在学习一些R并将其用于数据分析,对于我可能非常愚蠢的问题感到抱歉......
我正在分析一个数据框,其中包含许多与AMD Anderson数据库中一组细胞系中蛋白质存在相关的数据。所以我在数据表中有行数据行,在cols上有蛋白质和thir数据(&#34; AMDDatabase&#34;)。我需要使用相关性来交叉这些数据但是当我在它上面时它会给我一个错误&#34; 评估错误:没有足够的有限观察 &#34; < / p>
actividad_protein_long <- gather(data = AMD_database, key = protein, value = level, -(1:5))
correlation_table <- na.omit(actividad_protein_long) %>%
group_by(protein) %>%
summarise(r = cor.test(rel_IC50_uM, level, method = "Kendall")$estimate,
p_value = cor.test(rel_IC50_uM, level, method = "Kendall")$p.value)
我知道问题与cols上的数据数量有关,这个数字变化很大,我可以看到其中一些数据点在每个蛋白质三个数据点的阈值之下,因此分析无法完成。
如何过滤先前的数据,以便删除观察所需的三个数据以进行分析?
我试过
filteredData <- AMD_database[which(,colSums(!is.na(AMD_database)))>3]
filteredData <- AMD_database[which(AMD_database[,colSums(AMD_database)]>3)]
但它并没有很好地结束。如何在使用关联之前使AMD_database中的所有列包含足够的非NA值?有没有比这更好的解决方法?像这样绕过这个警告是正确的,还是我犯了一个大错误来避免它?
已经检查: cor.test ,"not enough finite observations" How to ignore cor.test:“not enough finite observations” and continue, when using tidyverse and ggplot2 (ggpmisc) R cor.test : "not enough finite observations"
但我不能使用&#34; Purrl&#34;包,因为这是为了在无法使用该软件包的服务器上共享,我不确定我是否会像其他帖子所说的那样绕过错误......
非常感谢提前:)
答案 0 :(得分:0)
如果我正确理解了问题,问题是每列都有不同的缺失变量行。这是我的原始解决方案,每两列检查它们共享的不丢失行的数量,并计算cor.test
## Creating data
dat <- replicate(100, rnorm(20))
# Adding NAs
dat[sample(2000, 700)] <- NA
cor.wrap <- function(dat) {
p <- ncol(dat)
cor.mat <- matrix(NA, ncol = p, nrow = p)
for (i in 1:(p - 1)) {
for (j in i:p) {
num.ind <- !is.na(dat[ ,i]) & !is.na(dat[ ,j])
cor.mat[i,j] <- ifelse(sum(num.ind) > 3,
cor.test(dat[num.ind, i], dat[num.ind, j])$statistic,
NA)
}
}
return(dat)
}
cor.wrap(dat)