Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何用向量中的重复值填充新变量?_R_Dataframe_Vector - Fatal编程技术网

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