如何用向量中的重复值填充新变量?

时间:2019-02-26 21:53:27

标签: r dataframe vector

我有一个值向量:

    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 :(得分:5)

最简单的方法是使用sapply

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

嗯...甚至还有一个更简单的解决方案:

values[df$variable]

答案 1 :(得分:2)

您可以使用rleinverse.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

数据

values = c(22, 42, 243)
variable = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)

答案 2 :(得分:2)

如果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