有没有一种有效的方法通过在R中测量多维数据帧的相关系数来过滤掉它?

有没有一种有效的方法通过在R中测量多维数据帧的相关系数来过滤掉它?,r,dataframe,correlation,R,Dataframe,Correlation,我打算从多维数据到R中的一个数字向量找到Pearson相关系数。基本上,我希望通过使用Pearson方法得到相关矩阵,希望通过使用特定的相关系数作为阈值来保持多维数据中每列的行a.k.a和特征。但是,我尝试了一些R实现来实现这一点,但并没有得到正确的相关矩阵。我怎样才能得到这个?有人能告诉我如何在R中轻松实现这一点吗?有什么想法吗 可复制示例 我最初的尝试是: 但上面的代码并没有返回正确的相关矩阵。我想做的是,某个人的每个特征如何与他的年龄相关。有什么有效的方法来实现这一点吗?有什么想法吗 目标

我打算从多维数据到R中的一个数字向量找到Pearson相关系数。基本上,我希望通过使用Pearson方法得到相关矩阵,希望通过使用特定的相关系数作为阈值来保持多维数据中每列的行a.k.a和特征。但是,我尝试了一些R实现来实现这一点,但并没有得到正确的相关矩阵。我怎样才能得到这个?有人能告诉我如何在R中轻松实现这一点吗?有什么想法吗

可复制示例

我最初的尝试是:

但上面的代码并没有返回正确的相关矩阵。我想做的是,某个人的每个特征如何与他的年龄相关。有什么有效的方法来实现这一点吗?有什么想法吗

目标:

基本上,我想保留与年龄高度相关的特征。我没有更好的办法在R中这样做。有人能告诉我如何在R中轻松有效地完成他的任务吗?谢谢

mylist = do.call(rbind,
                 apply(persons_df, 1, function(x){
                     temp = cor.test(age_df$age, as.numeric(x))
                     data.frame(t = temp$statistic, p = temp$p.value)
                 }))
mylist
#           t            p
#a  -1.060264 3.488012e-01
#b  -2.292612 8.361623e-02
#c -16.785311 7.382895e-05
#d  -1.362776 2.446304e-01
#e  -1.922296 1.269356e-01
#f  -4.671259 9.509393e-03
#g  -3.719296 2.048710e-02
#h  -2.684663 5.496171e-02
#i -15.814635 9.341701e-05
#j  -2.423014 7.252635e-02

然后使用mylist筛选出您不需要的值。

请举一个预期输出的示例。
age_df <- data.frame(personID= colnames(persons_df),
                     age=sample(1:50, 6 , replace = FALSE))
pearson_corr <- function(df1, df2, verbose=FALSE){
    stopifnot(ncol(df1)==nrow(df2))
    res <- as.data.frame()
    lapply(colnames(df1), function(x){
        lapply(x, rownames(y){
            if(colnames(x) %in% rownames(df2)){
                cor_mat <- stats::cor(y, df2$age, method = "pearson")
                ncor <- ncol(cor_mat)
                cmatt <- col(cor_mat)
                ord <- order(-cmat, cor_mat, decreasing = TRUE)- (ncor*cmatt - ncor)
                colnames(ord) <- colnames(cor_mat)
                res <- cbind(ID=c(cold(ord), ID2=c(ord)))
                res <- as.data.frame(cbind(out, cor=cor_mat[res]))
                res <- cbind(res, cor=cor_mat[out])
            }
        })
    })
    return(final_df)
}
mylist = do.call(rbind,
                 apply(persons_df, 1, function(x){
                     temp = cor.test(age_df$age, as.numeric(x))
                     data.frame(t = temp$statistic, p = temp$p.value)
                 }))
mylist
#           t            p
#a  -1.060264 3.488012e-01
#b  -2.292612 8.361623e-02
#c -16.785311 7.382895e-05
#d  -1.362776 2.446304e-01
#e  -1.922296 1.269356e-01
#f  -4.671259 9.509393e-03
#g  -3.719296 2.048710e-02
#h  -2.684663 5.496171e-02
#i -15.814635 9.341701e-05
#j  -2.423014 7.252635e-02