2017-01-19 82 views
1

我有一个数据集,其股票代码的范围是2-90214(其中有大约3000个唯一值)。显然,2和90214之间的某些值正在跳过。我想转换这些股票代码,使它们的范围从1-3000,并且如果以前的股票代码是1234,那么每次发生这个数字时,都会分配新的股票代码(比如100)。根据R中另一列的值为列指定随机值

总之,我想转换:

Stock_Code 
1234 
5678 
4321 
1234 
5678 

到:

Stock_Code 
100 
101 
102 
100 
101 

如何R中做到这一点?

回答

2

我们可以将数字转换为因子,然后将其转换为数字

as.numeric(factor(df$StockCode)) 

#[1] 1 3 2 1 3 

如果我们需要从100开始,我们可以在它

as.numeric(factor(df$StockCode)) + 99 

相同的数字增加99会得到相同的因素水平,这在转换成数字将给予相同的数值

1

我们可以使用match获得唯一值的索引,然后添加99

df1$Stock_Code <- match(df1$Stock_Code, unique(df1$Stock_Code)) + 99 
df1$Stock_Code 
[1] 100 101 102 100 101 

或者另一种方法是转换到factor和强迫到integer

with(df1, as.integer(factor(Stock_Code, levels = unique(Stock_Code)))+ 99) 
#[1] 100 101 102 100 101 
1

使用dplyr

library(dplyr) 
dense_rank(df$Stock_Code) + 99 
+0

这并没有给出预期的输出。如果你已经检查过它 – akrun

+2

是的,我知道,但它的地址'我想转换这些股票代码,以便它们的范围从1-3000,以这种方式,如果以前的股票代码是1234,那么每次发生这个数字时,新的股票代码(比如100)将被分配。“ OP想要的,我想他只是提供了一个理解的例子。 OP可以验证他到底想要什么。 –

相关问题