R 如何用向量中的重复值填充新变量?
我有一个值向量:R 如何用向量中的重复值填充新变量?,r,dataframe,vector,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 您可以使用rle和inverse.rle r <- rle(var
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
您可以使用
rle
和inverse.rle
r <- rle(variable)
rep(values, rle(variable)$lengths)
# [1] 22 22 22 22 42 42 42 42 243 243 243 243
将其值槽替换为值
,并调用inverse.rle
以获得所需的输出
r$values <- values
inverse.rle(r)
# [1] 22 22 22 22 42 42 42 42 243 243 243 243
最简单的方法是使用
sapply
:
sapply(variable, function(x) df$values[x])
嗯。。。甚至还有一个更简单的解决方案:
values[df$variable]
如果
变量
不是值
的索引元素,那么我们可以这样做
rep(values, tapply(variable, variable, length))
# [1] 22 22 22 22 42 42 42 42 243 243 243 243
或者,使用rle()
如果
df$variable
将是df$variable+5
?不过对OP来说似乎不是问题。很高兴你添加了values[variable]
Awesome,很棒的解决方案!我欣赏它的简单。谢谢。@markus在这种情况下做值[as.integer(factor(df$variable))]
当然,这种情况下,假设OP仅根据发生顺序将变量
匹配到值
位置。。。这似乎是一个非常奇怪的案例。如果df$variable
改为df$variable+5
,我可能会建议有一些早期的问题/bug需要修复。
rep(values, tapply(variable, variable, length))
# [1] 22 22 22 22 42 42 42 42 243 243 243 243
rep(values, rle(variable)$lengths)
# [1] 22 22 22 22 42 42 42 42 243 243 243 243