objs.sort(function(a,b){return b.last_nom>a.last_nom})
Таким образом, это работает с использованием пакета zoo, чтобы сначала избавиться от NA, а затем выполнить сравнение со смещением на одну строку.
zed <- zed %>%
dplyr::mutate(possIdTemp = zoo::na.locf(possessionName)) %>%
dplyr::mutate(isNewPossession = c(1, ifelse(possIdTemp[2:length(possIdTemp)] != possIdTemp[1:(length(possIdTemp)-1)], 1, 0)))
Пожалуйста, я открыт для лучшего решения этой проблемы, в частности, мне не нравится строка кода c(1, ifelse(possIdTemp[2:length(possIdTemp)] != possIdTemp[1:(length(possIdTemp)-1)], 1, 0))
- спасибо!
Один из способов - заполнить NA
предыдущими NA
, используя na.locf
из zoo
, и выполнить сравнение
library(zoo)
zed$possessionName <- na.locf(zed$possessionName)
zed$output_col <- c(1, +(zed$possessionName[-1] != zed$possessionName[-nrow(zed)]))
zed
# possessionName possessionMarket output_col
#1 Eagles Boston College 1
#2 Blue Devils Duke 1
#3 Blue Devils <NA> 0
#4 Blue Devils Duke 0
#5 Eagles Boston College 1
#6 Blue Devils Duke 1
#7 Blue Devils Duke 0
#8 Eagles Boston College 1
#9 Eagles Boston College 0
#10 Eagles Boston College 0
#11 Eagles <NA> 0
#12 Blue Devils Duke 1
#13 Blue Devils Duke 0
#14 Blue Devils <NA> 0
#15 Eagles Boston College 1
. ] мы можем использовать fill
и lag
library(tidyverse)
zed %>%
fill(possessionName) %>%
mutate(output_col = c(1, +(possessionName != lag(possessionName))[-1]))