12

コードフラグメント:

blarg = data.frame(a=c("aa", "bb", "dd"))
blarg$b = blarg$a
# blarg$b is now c("aa", "bb", "dd")
blarg$b = ifelse(blarg$a!="bb",blarg$a,"ZZZ")
# blarg$b is now c(1, "ZZZ", 3)
# I expected c("aa", "ZZZ", "dd")
# typeof(blarg$b) is "character"

blarg $ bc(1、 "ZZZ"、3)はなぜですか?数字はどこから来たのですか?

4

1 に答える 1

13

blargという名前のdata.frameを使用する場合は+1。

ベンが言ったことを拡張するために、因子は内部的に整数として格納されるため、このようなことを行うと、Rは期待どおりに処理しません。

str(blarg)上記のコードの手順をご覧ください。

stringsAsFactors=FALSEベンが提案したように使用するか、次の要素を使用することができます。

ifelse(blarg$a!='bb', levels(blarg$a), 'ZZZ')

または、さらに良いことに、そのレベルを置き換えたい場合blarg$aは、ステートメントを完全に'bb'削除できます。ifelse

levels(blarg$a)[levels(blarg$a)=='bb'] <- 'ZZZ'
于 2012-05-25T21:55:06.253 に答える