С может использовать ifelse
вместо if/else
, поскольку ifelse
векторизовано, в то время как if/else
принимает только одно значение длины 1 и возвращает длину 1
df$new_field <- with(df, as.numeric(substr(GEOID, 1,
ifelse(nchar(GEOID) == 6, 1, 2))))
Или другое можно преобразовать логический вектор в число c
n <- (nchar(df$GEOID) != 6) + 1
df$new_field <- with(df, as.numeric(substr(GEOID, 1, n)))
Используя воспроизводимый пример
v1 <- c('1234567', '123456', '1234')
n <- (nchar(v1) != 6) + 1
n
#[1] 2 1 2
substr(v1, 1, n)
#[1] "12" "1" "12"
ПРИМЕЧАНИЕ. В дополнение к substr
, substring
может также можно использовать с тем же методом