Ich habe eine Spalte von Zahlen von 1: 1000. Ich möchte die Bezeichnung "s" an die Vorderseite jeder Nummer anhängen, so dass die Gesamtzahl der Zeichen in jeder Zelle gleich bleibt. Zum Beispiel würde "1" "s0001" werden, "15" würde "s0015" werden, "620" würde "s0620" werden, und "1000" würde "s1000" werden.Verschachtelt, wenn sonst Anweisungen an Labels an Werte anfügen
Ich habe versucht, dies mit verschachtelten if else
Anweisungen zu erreichen, aber ich bekomme immer den Fehler, dass die Bedingung Länge> 1 hat und nur das erste Element verwendet wird. Hier
ist ein Beispiel Datensatz und der Code Ich verwende:
df=data.frame(code=seq(1:1000))
df$code=
if (df$code < 10) { df$code=paste("s000",df$code,sep="") } else
if (100 > df$code & df$code >= 10) { df$code=paste("s00",df$code,sep=="") } else
if (1000 > df$code & df$code >= 100) { df$code=paste("s0",df$code,sep="") } else
{ df$code=paste("s",df$code,sep="") }
Ich vermute, es ist ein einfacher Weg, dies zu tun, ohne if else
zu verwenden. Irgendwelche Gedanken?
Danke!
Lösung
Dank Joran! Wenn x nicht-kontinuierliche ganze Zahlen:
d=data.frame(x=sample(1:1000,500))
d$nc=nchar(d$x)
ddply(d,.(nc),transform,lab = paste("s",paste(rep("0",4-unique(nc)),collapse = ""),x,sep = ""))
+1 Viel, viel besser. – joran
@joran Ich weiß nur, weil ich fragen musste, wenn ich vor langer Zeit dasselbe machte! – Justin
Woah, schön! Danke Justin! – jslefche