我是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”。
有办法做到这一点吗?
答案 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