12

基本的に、私は次のように言います。

counter <- 3
k <- 9999

Rに次を印刷させたい:

on the 3rd count: 9999 

これを行うには、どのコマンドを使用すればよいですか? 私はRにまったく慣れていないので、詳しく説明してください。

4

3 に答える 3

20

基本的な造りは

paste("on the ", counter, "rd count: ", k, sep="")

数字の正しいサフィックスを選択するには、少し賢くする必要があります (つまり、3 の後の "rd"、4 ~ 9 の後の "th" など)。これを行う関数を次に示します。

suffixSelector <- function(x) {
  if (x%%10==1) {
    suffixSelector <- "st"
  } else if(x%%10==2) {
    suffixSelector <- "nd"
  } else if(x%%10==3) {
    suffixSelector <- "rd"
  } else {
    suffixSelector <- "th"
  }

}

したがって:

suffix <- suffixSelector(counter)
paste("on the ", counter, suffix, " count: ", k, sep="")

デフォルトでは、文字列の間に空白が挿入sepされるため、引数を設定する必要があります。paste

于 2012-10-23T18:19:08.827 に答える
4

使用するsprintf

> sprintf("on the %drd count: %d", counter, k)
[1] "on the 3rd count: 9999"
于 2012-10-23T18:33:11.460 に答える
2

これは、各整数を適切な接尾辞で接続するためのわずかに異なるアプローチです。それを分解すると、すべての整数の序数形式を構築するための構文(?)ルールをキャプチャしていることがわかります。

suffixPicker <- function(x) {
    suffix <- c("st", "nd", "rd", rep("th", 17))
    suffix[((x-1) %% 10 + 1) + 10*(((x %% 100) %/% 10) == 1)]
}

## Testing with your example
counter <- 3
k <- 9999
paste("on the ", paste0(counter, suffixPicker(counter)), 
      " count: ", k, sep="")
# [1] "on the 3rd count: 9999"

## Show that it also works for a range of numbers
x <- 1:24
paste0(x, suffixPicker(x))
#  [1] "1st"  "2nd"  "3rd"  "4th"  "5th"  "6th"  "7th"  "8th"  "9th"  "10th"
# [11] "11th" "12th" "13th" "14th" "15th" "16th" "17th" "18th" "19th" "20th"
# [21] "21st" "22nd" "23rd" "24th"

説明の1つの注意:10*(((x %% 100) %/% 10) == 1)10から19で終わる数字(ここでは11、12、および13が実際の悪役です)を選択して、それらをすべてsuffix含む要素に送信するためにビットが必要です"th"

于 2012-10-23T18:58:44.203 に答える