如何在给定的行中选择一个值的列,删除它并继续到下一行,在r中做同样的事情

c2e8gylq  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(172)

我有一个病例组和对照组之间的相关性矩阵,其中一些是基于人口统计学的完美相关性(即他们具有完全相同的人口统计学值组合),因此包含1.0的值
病例是行,对照是列。我想选择20个对照,从人口统计学上匹配我的20个病例。
从一行迭代到下一行,我想提取第一列包含该行的值1.0(即控制是一个完美的人口统计匹配的情况下)。然后我想删除此列,并继续到下一行,所以,如果它包含一个值1在多行,我不会得到它一遍又一遍地返回。
最终的结果我希望将是一个20个独特的列(控件),每一个完美的匹配我的20行(情况)之一的列表。
我觉得应该有一个简单的方法来做到这一点。有人能帮忙吗?

q9yhzks0

q9yhzks01#

好吧,我想明白了。如果其他人也有这个问题,就发布吧。如果你有一个样本和对照之间的相关矩阵,其中的值为1.0(完美匹配),并且只想提取一个非冗余的名称列表,其中包含一个匹配的对照,这应该可以工作:

corout<- cor(cases,controls)

corout <-as.data.frame(t(corout))

df2 <- as.data.frame(Filter(function(x) any(x == 1), corout))
temp <- apply(df2, 2, function(x) names(which(x == 1)))
temp.b<-as.data.frame(unlist(temp))

v <-vector()

for(i in temp){
    matching_control <- as.vector(str_split(as.vector(i), " "))
    
    for (j in 1:length(matching_control )) { 
        
        
        if((is.element(matching_control[j], v))){  
            
        } else 
            
            if(!is.element(matching_control[j], v)){ 
                v <-append(v, matching_control[j]) 
                break
                
                
            }    
    }
    
}

selected.matches <-unlist(v)
rm(v)

字符串

相关问题