基于逻辑运算符和相同匹配ID的粘贴列表

时间:2017-08-11 17:35:44

标签: r list match operator-keyword

我是R的新手,会尽力解释我的问题。

我在数据框架中工作,我有15571个obs和18976个变量。 colnames和rownames是基因名称,大多数都具有相同的名称匹配。条目仅包含数值,并且是相关值。这就是它的样子。

        [GENE128]  [GENE271]  [GENE2983] 
[GENE231] 0.71       0.98       0.32
[GENE128] 0.23       0.61       0.90
[GENE271] 0.87       0.95       0.63

我想要做的是编写一个代码,我用逻辑运算符x>粘贴df中所有基因的列表。 0.8,并且只有基因名(col-和rownames)相同的基因,所以在上面的例子中只有“GENE271”在这种情况下是“TRUE”。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

您的示例数据作为数据框

vec = c( 0.71,0.98,0.32,0.23,0.61,0.90,0.87,0.95,0.63)
mt  = matrix(vec, 3, 3, byrow = T)
coln = c('GENE128', 'GENE271', 'GENE2983')
rown = c('GENE231', 'GENE128', 'GENE271')

df = data.frame(mt)
colnames(df) = coln
rownames(df) = rown

使用行名和列名构建新数据框并对值进行矢量化

ndf = data.frame(coln = as.vector(sapply(coln, function(x) rep(x, ncol(df)))), rown = rep(rown, ncol(df)), data = as.vector(as.matrix(df)), stringsAsFactors = F)

idx_true = sapply(1:nrow(ndf), function(x) ndf[x, 1] == ndf[x, 2])

subs_ndf = ndf[idx_true, ]

subs_ndf[which(ndf[idx_true, 'data'] > 0.8 ), ]

输出

     coln    rown data
6 GENE271 GENE271 0.95
相关问题