我有一个值向量:
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
答案 0 :(得分:5)
最简单的方法是使用sapply
:
sapply(variable, function(x) df$values[x])
嗯...甚至还有一个更简单的解决方案:
values[df$variable]
答案 1 :(得分:2)
您可以使用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
数据
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