我的数据集的库存代码范围为2-90214(具有大约3000个唯一值)。显然,2到90214之间的某些值会被跳过。我想转换这些股票代码,使它们的范围从1-3000到如果前一个股票代码是1234,那么每次出现这个数字时,都会分配新的股票代码(比如说100)。
简而言之,我想转换:
Stock_Code
1234
5678
4321
1234
5678
进入:
Stock_Code
100
101
102
100
101
我如何在R中执行此操作?
答案 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