2017-04-13 65 views
0

我想根据另一列(A)中的数字随机地将数字分配给列(B)。如果A列有重复,我希望那些重复的分配有相同的随机数。根据列A为列B分配随机数。A中的所有重复项获得相同的随机数

ColA=c(112,111,004,678,112,262,963) 
RandomNumbers=c(.02, .08,.03,.05, .09,.01,.07) 

ColB=c(.09, .02,.01,.03,.09,.08,.05) 

谢谢!

+0

听起来像你想要的与随机数字无关:你正在寻找一个散列函数。 –

+0

我使用runif来创建RandomNumbers变量。以上只是一个例子。 – Tracy

回答

1

我假设你想选择“随机数”,因为你的列表看起来不是很随机。使用您的列表,您可以根据ColA中的值为每个“随机”数字指定一个名称并参考该名称。

names(RandomNumbers) = unique(ColA) 
ColB = RandomNumbers[as.character(ColA)] 
112 111 4 678 112 262 963 
0.02 0.08 0.03 0.05 0.02 0.09 0.01 
+0

我使用runif来获取随机数字。以上只是为了简化。这绝对有效!非常感谢G5W – Tracy

1

有很多方法去皮肤这只猫。我将创建一个随机数查找表,然后用查找表left_join原始列表,如下所示。但这只是一个可能的解决方案:

library(dplyr) 

Df <- data.frame(ColA =c (112,112,004,678,112,262,963)) 
LookUpDf <- data.frame(ColA = unique(Df$ColA), 
         randNum = runif(length(unique(Df$ColA)))) 
left_join(Df, LookUpDf)