使用跨多个列的NA减去两列

时间:2016-03-10 07:26:07

标签: r

我希望用前一列中的值减去每个连续的列。

列表

A   B   C   D   E
1   2   3   4   6
2   2   2   3   NA
3   4   5   NA  NA
1   NA  NA  2   4

结果

1   1   1   2
0   0   1   NA
1   1   NA  NA
NA  NA  NA  2

我可以通过列绑定列中的所有结果as.matrix((ifelse(!is.na(List[,1])&!is.na(List[,2], List[,2]-List[,1], "NA")))来实现,但这看起来非常繁琐。

  1. 有更快的方法吗?

  2. 对于List中最后一个车道的情况,我如何获得两个值(D列 - A列)之间的差值除以它们之间的间隔(3个间隔)?因此,我们不是Result,而是:

  3. Alt_result

    1   1   1   2
    0   0   1   NA
    1   1   NA  NA
    NA  NA  0.333  2
    

2 个答案:

答案 0 :(得分:2)

我们通过删除最后一列[-ncol(d1)]和第一列[-1]来对数据集进行子集化,然后减去那些大小相同的数据集,以便每个列都会被前面的列减去。

abs(d1[-ncol(d1)]- d1[-1])
#   A  B  C  D
#1  1  1  1  2
#2  0  0  1 NA
#3  1  1 NA NA
#4 NA NA NA  2

答案 1 :(得分:2)

也可以通过明确应用diff功能

来完成
t(apply(df,1,diff))
#      B  C  D  E
#[1,]  1  1  1  2
#[2,]  0  0  1 NA
#[3,]  1  1 NA NA
#[4,] NA NA NA  2