7 Stimmen

Drucken Sie die Nummer als Wort aus, wenn sie kleiner als 10 ist

Betrachten Sie diesen Code:

sample(1:20, 1)

Wenn das Ergebnis weniger als oder gleich 10 ist, kann ich R dazu bringen, die Zahl als Wort auszugeben. Zum Beispiel, wenn das Ergebnis von sample(1:20, 1) 2 ist, kann ich R programmieren, das Ergebnis als zwei auszugeben, wenn das Ergebnis von sample(1:20, 1) 10 ist, kann ich R programmieren, das Ergebnis als zehn auszugeben, wenn das Ergebnis von sample(1:20, 1) 13 ist, kann ich R programmieren, das Ergebnis als 13 auszugeben, und so weiter.

Ich verwende knitr um R-Code für meine Abschlussarbeit in LaTeX umzuwandeln. Meine Regel besagt, dass jede Zahl kleiner oder gleich 10 als Wort gedruckt werden sollte.

13voto

Sven Hohenstein Punkte 78380

Sie können das englisch Paket verwenden, um Zahlen in englische Wörter umzuwandeln:

set.seed(1)
s <- sample(1:20, 10)
# [1]  6  8 11 16  4 14 15  9 19  1

library(english)
ifelse(s > 10, s, as.character(english(s)))
# [1] "sechs"   "acht" "11"    "16"    "vier"  "14"    "15"    "neun"  "19"    "eins"

8voto

Konrad Rudolph Punkte 503837

Das ist im Grunde genommen dasselbe wie Marks Antwort, aber viel kürzer:

numbers = c('zero', 'one', 'two', 'three', 'four', 'five',
            'six', 'seven', 'eight', 'nine', 'ten')
readable = function (x) ifelse(x < 11, numbers[x + 1], x)

> readable(sample(1:20, 10))
 [1] "20"    "12"    "13"    "seven" "ten"   "11"    "17"    "eight" "16"    "18"

Wenn Sie knitr mit LaTeX verwenden, ist dies möglicherweise eine Aufgabe für LaTeX und nicht für R: R stellt die Rohdaten zur Verfügung, und LaTeX ist für die Formatierung zuständig. Ich würde wahrscheinlich knitr einfach anweisen, Zahlen innerhalb eines Makros zu verwenden - \readable{42} - und dann die Konvertierung mit diesem Makro durchzuführen (nicht getestet und erfordert das Paket siunitx):

\newcommand*\readable[1]{%
  \ifcase#1 zero\or one\or two\or three\or four\or five\or
    six\or seven\or eight\or nine\or ten\else\num{#1}}

2voto

Mark Miller Punkte 11771

Dies ist nicht elegant, aber ich denke, es wird tun, was du willst.

set.seed(1234)

x <- sample(1:20, 1)

my.data <- read.table(text='
  x    y
  0    zero
  1    one
  2    two
  3    three
  4    four
  5    five
  6    six
  7    seven
  8    eight
  9    nine
  10   ten
', header = TRUE)

if(x > 10) {y = x} else {y = my.data$y[x == my.data$x]}

data.frame(x, y)

  x     y
1 3 three

Hier ist eine Möglichkeit, viele Zahlen auf einmal zu konvertieren:

set.seed(1234)

x <- sample(1:20, 10)
x <- as.data.frame(x)

my.data <- read.table(text='
  x    y
  0    zero
  1    one
  2    two
  3    three
  4    four
  5    five
  6    six
  7    seven
  8    eight
  9    nine
  10   ten
', header = TRUE, stringsAsFactors = FALSE)

y <- apply(x, 1, function(i) if(i > 10) {y = i} else {y = my.data$y[i == my.data$x]})

data.frame(x, y)

    x     y
1   3 three
2  12    12
3  11    11
4  18    18
5  14    14
6  10   ten
7   1   one
8   4  four
9   8 eight
10  6   six

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X