Добавить ведущие числа на основе диапазона чисел - PullRequest
2 голосов
/ 05 марта 2020

У меня есть годы, которые представлены четырьмя или двумя цифрами в одной переменной. Например, c (2010, 1980, 60, 69, 75, 5, 15)

Каждые 2 цифры от 60 до 75 должны иметь перед собой 19.

Каждые 2 цифры от 10 до 20 должны иметь перед собой 20.

sprintf кажется способом go, но как именно? Заранее спасибо!

Ответы [ 5 ]

4 голосов
/ 05 марта 2020

Что насчёт этого?

pos <- nchar(x) < 4
x[pos] <- x[pos] + 2000
x[x > 2020] <- x[x > 2020] - 100
x
# [1] 2010 1980 1960 1969 1975 2005 2015

Данные

x <- c(2010, 1980, 60, 69, 75, 5, 15)
3 голосов
/ 05 марта 2020

Использование векторизации и логических значений:

x + (x>=60 & x<=75)*1900 + (x>=10 & x<=20)*2000
[1] 2010 1980 1960 1969 1975    5 2015
3 голосов
/ 05 марта 2020
x <- c(2010, 1980, 60, 69, 75, 5, 15)
p <- ifelse(x>=10 & x<=20, "20", ifelse(x>=60 & x<=75, "19", ""))
paste0(p, x)

[1] "2010" "1980" "1960" "1969" "1975" "5"    "2015"

ОП сказал:

Каждые 2 цифры от 10 до 20 должны иметь перед собой 20.

5 не является 2 ди git число от 10 до 20!

1 голос
/ 05 марта 2020

Используйте пошаговую логику c:

x <- c(2010, 1980, 60, 69, 75, 5, 15)
x[x <= 20] <- x[x <= 20] + 2000 # less than 20 -> add 2000
x[x <= 75] <- x[x <= 75] + 1900 # remaining & less than 75 -> add 1900
x
#2010 1980 1960 1969 1975 2005 2015
1 голос
/ 05 марта 2020

Решение Base R:

ifelse(nchar(x) < 4 & x > 20, x + 1900, ifelse(nchar(x) < 4 & x >= 10, x + 2000, x))

Данные:

x <- c(2010, 1980, 60, 69, 75, 5, 15)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...