应用diff()并用NA替换原始data.frame中的元素

时间:2014-07-08 15:07:59

标签: r dataframe subset apply

我有一点问题,我需要你的帮助。我有以下数据框:

set.seed(1000)
test = data.frame(a = sample(10, replace=T), b = sample(10, replace=T), c=rep(NA, 10))

> test
   a  b  c
1  1  6 NA
2  2  4 NA
3  6  3 NA
4  6  9 NA
5  1  5 NA
6  4  3 NA
7  5  1 NA
8  3  7 NA
9  5 10 NA
10 4  2 NA

并执行diff()函数来计算每列中连续行之间的差异

test2 = abs(apply(test, 2, diff))

> test2
     a b  c
[1,] 1 2 NA
[2,] 4 1 NA
[3,] 0 6 NA
[4,] 5 4 NA
[5,] 3 2 NA
[6,] 1 2 NA
[7,] 2 6 NA
[8,] 2 3 NA
[9,] 1 8 NA

我想替换'test'中的那些元素,其中test2的差异大于/等于4,具有NA值。我希望,例如,test [3,1]变为NA,因为它在test2 [2,1]中的差异是> = 4

1 个答案:

答案 0 :(得分:0)

 test2 <- abs(apply(test,2,function(x) c(NA, diff(x))))

更新

基于新信息:

test[!is.na(test2) & test2 >4] <- NA
test
#   a  b  c
# 1   4  4 NA
# 2   8  8 NA
# 3  NA  4 NA
# 4  NA NA NA
# 5   6  8 NA
# 6  NA NA NA
# 7  NA  5 NA
# 8   6  7 NA
# 9   3 NA NA
# 10  3 NA NA