1

私はRに非常に慣れていないため、Rの使用方法を独学しています。Windows 7 で R バージョン 3.0.1 を使用しています (関連する場合)。

factors のデータを文字のみに変換するのに問題があります。私のデータは次のとおりです。

activity <- c("1","2","10","ZZ")

出力として欲しいのは

activity <- c("01","02","10","ZZ") 

ここで、各文字列に 1 文字しか含まれていない場合は、0(上記のように) の前に a を付ける必要があります。

「as.character」を使用してみましたが、前にゼロが追加されません。それから私は見つけsprintfて試しました:

activity <- sprintf("%02d", (activity))
# [1] "01" "02" "03" "04"

これにより、見つかった単一のデータの前にゼロ「0」が追加されますが、問題はデータのすべてのレベルを変更することです (上記のように)。

ここで何が問題なのか、どうすれば修正できるのか誰か知っていますか? ありがとうございました。

4

2 に答える 2

5

正規表現を使用できます。特に、任意の1 桁subに置き換えてその桁が続く関数を使用できます。データ全体がそれに応じて変更されるように、因子のレベルを置き換えるためにこれを行う必要があります。0activity

levels(activity) <- sub("^([0-9])$", "0\\1", levels(activity))
# [1] 01 02 10 ZZ
# Levels: 01 02 10 ZZ

編集: 数字だけでなく任意の文字列を 1 文字だけに置き換えたい場合は[0-9].. あれは:

# suppose x is:
x <- c("1", "a", "Y", "!", "bb", "45") 
x <- factor(x, levels=unique(x))

levels(x) <- sub("^(.)$", "0\\1", levels(x))
# [1] 01 0a 0Y 0! bb 45
# Levels: 01 0a 0Y 0! bb 45
于 2013-07-15T15:25:21.017 に答える
2

?factor因子をそれらの値に戻す適切な方法を読んでください。levelこれまで見てきたように、ファクターの操作には注意が必要です。これは、ファクターのではなく、基礎となるインデックスを変更してしまう場合があるためです。

また、文字を「ゼロパッド」することもできません:

y <- factor(c('1', '2', '10', 'ZZ'))
x <- as.character(y)
sprintf('%02d', x)
Error in sprintf("%02d", x) : 
  invalid format '%02d'; use format %s for character objects

代わりに、yucky を使用できますifelse

ifelse(is.na(as.numeric(x)), x, sprintf('%02d', as.numeric(x)))
[1] "01" "02" "10" "ZZ"

しかし、Arun が示したように、ここでは正規表現が適しています。

于 2013-07-15T15:25:20.857 に答える