请告诉我如何替换重复项,当从 1 更改为 -1 或从 -1 更改为 1 时,将重复替换为 (NA)
mas = c(1 , 1 , 1 , 1, 1, -1, -1, -1, -1, -1, -1 ,-1 ,-1 ,-1 ,-1 ,-1, -1, -1, 1, 1, 1, 1, -1, -1)
mas
[1] 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1
duplicated(mas ) # не помогает
вот что должно получиться
[1] 1 NA NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA NA 1 NA NA NA -1 NA
我尝试这种方式,它不起作用。
mas = c(1 , 1 , 1 , 1, 1, -1, -1, -1, -1, -1, -1 ,-1 ,-1 ,-1 ,-1 ,-1, -1, -1, 1, 1, 1, 1, -1, -1)
mas
[1] 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1
# вот такой способ, но пропускает первое число и выводит TRUE либо FALSE, а в целом работает.
dt = data.table(mas)
dt2 = dt$mas[-1] != dt$mas[-nrow(dt)]
dt2
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE
а вот что должно получиться
[1] 1 NA NA NA NA -1 NA NA NA NA NA NA NA NA NA NA NA NA 1 NA NA NA -1 NA
如果解决方案是将向量元素与其前一个元素进行比较,则可以使用
shift
包中的函数作为实现data.table
:fcoalesce
这里替换NA
,它是通过将向量的第一个元素与前一个元素(不存在)进行比较而形成的。您还可以使用以下函数跟踪新系列(相同值)的开始
rle
:rle(mas)$lengths
返回系列的长度。为了获得新系列开始的元素的索引,我们使用累积和。结果: