Как заполнить новую переменную повторяющимися значениями из вектора? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть вектор значений:

    values = c(22, 42, 243)

У меня есть переменная в кадре данных:

    df$variable = 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3

Как мне повторить каждое значение в векторе значений n раз вновая переменная в моем фрейме данных, так что я получаю следующее:

    df$new_variable = 22, 22, 22, 22, 42, 42, 42, 42, 243, 243, 243, 243

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Самый простой способ - использовать sapply:

sapply(variable, function(x) df$values[x])

Хм ... Есть даже более простое решение:

values[df$variable]
0 голосов
/ 27 февраля 2019

Если variable не предназначено для элементов индекса values, тогда мы можем сделать

rep(values, tapply(variable, variable, length))
# [1]  22  22  22  22  42  42  42  42 243 243 243 243

Или с rle()

rep(values, rle(variable)$lengths)
# [1]  22  22  22  22  42  42  42  42 243 243 243 243
0 голосов
/ 27 февраля 2019

Вы можете использовать rle и inverse.rle

r <- rle(variable)

r - это объект класса "rle"

r
#Run Length Encoding
#  lengths: int [1:3] 4 4 4
#  values : num [1:3] 1 2 3

Заменить его слот значений на values и позвоните inverse.rle, чтобы получить желаемый результат

r$values <- values
inverse.rle(r)
# [1]  22  22  22  22  42  42  42  42 243 243 243 243

data

values = c(22, 42, 243)
variable = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...