我有一个包含整数的数据框,如下所示:
# generate data frame
df = cbind(c(0,102,0,40,0,0), c(22,0,0,0,12,4), c(23,101,55,0,0,0),
c(0,0,0,414,0,0), c(0,0,61,0,0,112), c(0,0,0,0,20,0))
colnames(df) = c('A', 'T', 'C', 'G', 'N', 'Del')
rownames(df) = c('Pos1', 'Pos2', 'Pos3', 'Pos4', 'Pos5', 'Pos6')
df
A T C G N Del Pos1 0 22 23 0 0 0 Pos2 102 0 101 0 0 0 Pos3 0 0 55 0 61 0 Pos4 40 0 0 414 0 0 Pos5 0 12 0 0 0 20 Pos6 0 4 0 0 112 0
我还有一个包含整数的向量(对应于df的列索引):
# generate vector
cols = c(2,3,5,4,6,5)
现在,我想将df中的所有整数重置为零,这些整数存在于列中,列索引列在向量row-by-row中.例如,对于第一行,我希望将列2重置为零,对于第二行,我希望将列3重置为零,依此类推.
我用下面这段代码解决了这个问题:
for (i in c(1:nrow(df))) {
ncol = cols[[i]]
df[[i, ncol]] = 0
df
}
df
A T C G N Del Pos1 0 0 23 0 0 0 Pos2 102 0 0 0 0 0 Pos3 0 0 55 0 0 0 Pos4 40 0 0 0 0 0 Pos5 0 12 0 0 0 0 Pos6 0 4 0 0 0 0
如您所见,我的代码按预期运行.然而,事实证明,它在 Big Data 集上的效率非常低.因此,我想知道是否有比使用for循环快得多的替代方法.
Note看起来我是在重置每一行中的最大值,但情况并非如此,在某些情况下,我要重置为零的是两个值中较小的一个.因此,我不能简单地将每行中的最小或最大值重置为零.