Создайте логический столбец в кадре данных R, который возвращает значение true, если значение другого столбца изменяется строка за строкой

objs.sort(function(a,b){return b.last_nom>a.last_nom})
2
задан Canovice 16 January 2019 в 05:48
поделиться

2 ответа

Таким образом, это работает с использованием пакета 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)) - спасибо!

0
ответ дан Canovice 16 January 2019 в 05:48
поделиться

Один из способов - заполнить 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]))
0
ответ дан Ronak Shah 16 January 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: