У меня есть оператор if в for-l oop, который работает, когда я помещаю [Tag: if -statement] или for-l oop в изоляции в консоли, но когда я запускаю весь кусок кода, я получаю сообщение об ошибке:
Ошибка в if (CEOsBefore2011 $ madeceo [z] == CEOsBefore2011 $ сталоceo [z -: пропущенное значение где TRUE / FALSE необходимо
И вот код
clean_year <- c(1)
clean_company <-c(1)
clean_total_comp <- c(1)
clean_execid <- c(1)
clean_becameceo <- c(1)
z = 5
for (execid in CEOsBefore2011$becameceo) {
z = z + 1
if(CEOsBefore2011$becameceo[z] == CEOsBefore2011$becameceo[z-5]) {
clean_year <- c(clean_year, CEOsBefore2011$year[z:z-5])
clean_company <- c(clean_company, CEOsBefore2011$Company[z:z-5])
clean_total_comp <- c(clean_total_comp, CEOsBefore2011$TotalComp[z:z-5])
clean_execid <- c(clean_execid, CEOsBefore2011$execid[z:z-5])
clean_becameceo <- c(clean_becameceo, CEOsBefore2011$becameceo[z:z-5])
print(z)
} else{
}
}
По сути, я пытаюсь очистить данные, проверяя каждую строку. по крайней мере, 6 строк подряд одной и той же даты стали, которые будут включены в данные, в противном случае удалите их. Любые мысли?
Воспроизводимый пример, помогающий прояснить ситуацию, представлен ниже. Я хочу включить данные только в том случае, если у генеральных директоров есть полные данные за 6 лет, поэтому в примере, который вы видите, я хочу включить Алекса, но исключить Джона из данных.
Так что вся строка, в которой находится Джон, должна быть исключено
Надеюсь, это прояснит ситуацию, спасибо много!
year <- c(2011,2011,2012,2013,2014,2015,2016)
ceo <- c('john', 'alex', 'alex', 'alex', 'alex', 'alex', 'alex')
comp <- c(45,84,85,86,91,88,91)
combined <- tibble(year = year, ceo = ceo, comp = comp)
clean_year <- c()
clean_ceo <- c()
clean_comp <- c()
z = 5
for (ceo in combined$ceo){
z = z + 1
if(combined$ceo[z] == combined$ceo[z-5]){
clean_year <- c(clean_year, combined$year[z:z-5])
clean_ceo <- c(clean_ceo, combined$ceo[z:z-5])
clean_comp <- c(clean_comp, combined$comp[z:z-5])
} else{
}
}