2017-11-10 4 views
0

2つの列を持つデータフレームがあります。最初の文字列には数値が含まれ、2番目の文字列には2つの文字列が含まれます。私の問題は次のとおりです。第2列の文字列を別の文字列に置き換えると、最初の列はclassから強制的に数値に変換されます。ここに例があります:他の文字列が変更されたときに数値列が文字列に強制されます

df <- data.frame(num = c(1,2), char = c("a", "b"), stringsAsFactors = F) 
class(df$num) # "numeric" 
class(df$char) # "character" 
df[df$char == "a", ] <- "c" 
class(df$char) # "character" 
class(df$num) # "character" !! 

この動作の理由とその停止方法は何ですか?

答えて

2

エラー:df[df$char == "a", ] <- "c"が行全体を上書きするため、最初の列が強制的に強制されます。 "a"を "c"に置き換える正しい方法は、df$char[df$char == "a"] <- "c"です。あなたはそれを変更した後、DFで

+2

あなたの答えに間違いはありません。もう1つのオプションは 'df [df [[" char "]] ==" a "、" char "] < - " c "'です。あなたの答えにあるものは少し入力する方が簡単ですが、私のコメントにあるものは変数で動作するので、両方を知っておいてよかったです。あなたが 'my_col < - " char "'を持っているならば、 'df [[my_col]] ==" a "、my_col] < - " c "'は変数では動作しません。 – Gregor

0

ルック:

> df 
    num char 
1 c c 
2 2 b 
> 

だから、コース$ num個の文字となっています。あなたのコマンド(コンマ構文のため)によって、変更される行全体が特定されました。

異なる置換コマンド

df[df == "a"] <- "c" 

あなたが期待していたものを行います。

関連する問題