根据R

时间:2017-01-19 05:28:37

标签: r

我的数据集的库存代码范围为2-90214(具有大约3000个唯一值)。显然,2到90214之间的某些值会被跳过。我想转换这些股票代码,使它们的范围从1-3000到如果前一个股票代码是1234,那么每次出现这个数字时,都会分配新的股票代码(比如说100)。

简而言之,我想转换:

Stock_Code
 1234
 5678
 4321
 1234
 5678

进入:

Stock_Code
 100
 101
 102
 100
 101

我如何在R中执行此操作?

3 个答案:

答案 0 :(得分:2)

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

as.numeric(factor(df$StockCode))

#[1] 1 3 2 1 3

如果我们从100开始需要它,我们可以在其中添加99

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

相同的数字会得到相同的因子水平,转换成数字时会得到相同的数值

答案 1 :(得分: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

答案 2 :(得分:1)

使用dplyr

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