df中行与na

时间:2016-03-09 14:15:16

标签: r

我的示例数据如下所示

 DF
n    a   b    c    d
1    NA  NA   NA   NA
2    1    2    3    4
3    5    6    7    8
4    9    NA   11   12
5    NA   NA   NA   NA
6    4    5     6    NA
7    8    9     10   11
8    12   13    15   16
9    NA   NA    NA   NA

我需要从第3行和第4行中减去第2行。

同样,我需要从第7行和第8行中减去第6行

我的真实数据很大,有没有办法自动完成。似乎它可能是一些循环,但因为我是虚拟R用户我的试验不成功。 感谢您提供任何帮助和提示。

更新

我想实现类似的目标

DF2
rowN1<-DF$row3-DF$row2
rowN2<-DF$row4-DF$row2

rowN3<-DF$row7-DF$row6 # there is NA in row 6 so after subtracting there should be NA also
rowN4<-DF$row8-DF$row6

1 个答案:

答案 0 :(得分:0)

这是一个想法

set.seed(1)
(m <- matrix(sample(c(1:9, NA), 60, T), ncol=5))
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]    3    7    3    8    8
#  [2,]    4    4    4    2    7
#  [3,]    6    8    1    8    5
#  [4,]   NA    5    4    5    9
#  [5,]    3    8    9    9    5
#  [6,]    9   NA    4    7    3
#  [7,]   NA    4    5    8    1
#  [8,]    7    8    6    6    1
#  [9,]    7   NA    5    6    4
# [10,]    1    3    2    8    6
# [11,]    3    7    9    1    7
# [12,]    2    2    7    5    5

idx <- seq(2, nrow(m)-2, 4)
do.call(rbind, lapply(idx, function(x) {
  rbind(m[x+1, ]-m[x, ], m[x+2, ]-m[x, ])
}))
# [1,]    2    4   -3    6   -2
# [2,]   NA    1    0    3    2
# [3,]   NA   NA    1    1   -2
# [4,]   -2   NA    2   -1   -2
# [5,]    2    4    7   -7    1
# [6,]    1   -1    5   -3   -1