2017-01-19 81 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可以驗證他到底想要什麼。 –

相關問題