2017-01-09 12 views
0

私はこのような小さなデータフレームを持っている:R:列内の文字列を条件付きの列に置き換えるにはどうすればいいですか?

a<-c("green","green","green","green","green","green","green","green","green","green") 
b<-c("blue","red","blue","red","blue","red","blue","red","blue","red") 
df<-data.frame(a,b) 
df 
     a b 
1 green blue 
2 green red 
3 green blue 
4 green red 
5 green blue 
6 green red 
7 green blue 
8 green red 
9 green blue 
10 green red 

と私はdf[b=="red",]することにより、これらの行を選択することができ

のb ==「赤」「黄」で「グリーン」を交換したいと思います置換は機能しません。私が試した:これの

> df[b=="red",]$a<-gsub("green","yellow",df[b=="red",]) 
Fehler in `$<-.data.frame`(`*tmp*`, "a", value = c("c(1, 1, 1, 1, 1)", : 
    replacement has 2 rows, data has 5 

または

> df$a[subset(df$a,df$b=="red")]<-"yellow" 
Warnmeldung: 
In `[<-.factor`(`*tmp*`, subset(df$a, df$b == "red"), value = c(NA, : 
    invalid factor level, NA generated 
> df 
     a b 
1 <NA> blue 
2 green red 
3 green blue 
4 green red 
5 green blue 
6 green red 
7 green blue 
8 green red 
9 green blue 
10 green red 

> df[b=="red",]$a<-"yellow" 
Warnmeldung: 
In `[<-.factor`(`*tmp*`, iseq, value = c("yellow", "yellow", "yellow", : 
    invalid factor level, NA generated 
> df 
     a b 
1 green blue 
2 <NA> red 
3 green blue 
4 <NA> red 
5 green blue 
6 <NA> red 
7 green blue 
8 <NA> red 
9 green blue 
10 <NA> red 

なし私の問題のために正常に動作しません。最も簡単な解決策は何でしょうか?多くのありがとう、Treppenlift。

+2

df < - data.frame(a、b、stringsAsFactors = FALSE);を試してください。 df [df $ b == 'red'、1] < - 'yellow' '。問題は 'R'は' data.frame'の呼び出しで 'stringsAsFactors = TRUE'をデフォルトで設定するということです。 – bouncyball

+0

あなたはまた、2つの条件を持つ必要があります: 'df $ b ==" red "'と 'df $ a ==" green "'データ内にこのような場合を入れます –

+0

@bouncyballこの解決策はうまくいきます。ありがとうございます – treppenlift

答えて

0

どの機能を使用することができます。いくつかの例については、http://www.endmemo.com/program/R/which.phpを参照してください。

df[which(df[,2]=="red"),1] <- "yellow" 
+0

'は'ここで実際には必要ありません。関数を削除するとうまくいくでしょう: 'df [df [、2] == 'red'、]' – bouncyball

+0

あなたはそうです、それはもっと早いです。 – Christov

関連する問題