2017-01-19 4 views
1

Ich habe einen Datensatz mit Stock Codes im Bereich von 2-90214 (der etwa 3000 eindeutige Werte hat). Offensichtlich werden einige Werte zwischen 2 und 90214 übersprungen. Ich möchte diese Lagercodes so umwandeln, dass sie von 1-3000 reichen, und zwar so, dass, wenn der vorherige Lagercode 1234 war, jedes Mal, wenn diese Nummer auftritt, der neue Lagercode (etwa 100) zugewiesen wird.Weisen Sie der Spalte nach den Werten einer anderen Spalte zufällige Werte zu. R

Kurz gesagt, ich will konvertieren:

Stock_Code 
1234 
5678 
4321 
1234 
5678 

in:

Stock_Code 
100 
101 
102 
100 
101 

Wie kann ich dies tun in R?

Antwort

2
zu konvertieren ist

Wir können die Zahlen in einen Faktor umwandeln und dann in einen numerischen Wert umwandeln

as.numeric(factor(df$StockCode)) 

#[1] 1 3 2 1 3 

Wenn wir es aus 100 Start benötigen, können wir 99 hinzufügen darin

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

Gleiche Zahlen würden denselben Faktor Ebene erhalten, die auf in numerischer Umwandlung gleichen numerischen Wert geben würde

1

Wir können match verwenden Sie den Index der einzigartigen Werte zu erhalten, und dann 99

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

Oder eine andere Option in den factor und zwingen zu integer

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

Mit dplyr

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

Dies gibt nicht die erwartete Ausgabe. Wenn Sie es überprüft haben – akrun

+2

Ja, ich weiß, aber es Adressen 'Ich möchte diese Lagerbestände konvertieren, so dass sie von 1-3000 und in der Weise, dass, wenn der vorherige Lagercode war 1234, dann immer wenn diese Zahl auftritt, die neuer Lagercode (zB 100) wird vergeben. ' das OP wollte, ich denke, er bot nur ein Beispiel für das Verständnis. OP kann überprüfen, was er genau wollte. –

Verwandte Themen