2016-06-21 17 views
-1

特定の温度範囲を "cold"、 "med"、または "hot"のいずれかに置き換えようとしていますが、私の問題の解決方法はわかりません。データセットの名前は「stats」、温度は「temp1」です。ベクトル値を名前に置き換えてください

tmp1<-stats$temp1 
lesser<-stats[stats$temp1<=11,] 
inbetween<-stats[stats$temp1>11 & stats$temp1<22,] 
greater<-stats[stats$temp1>=22,] 
stats$temp2<-replace(tmp1, c("lesser", "inbetween", "greater"), c("cold","med","hot")) 

私は入れませんエラーがある: `$ < -.data.frame交換は1095行を持っているに

エラー、データが、私はいくつかのNAを持っている1092

を持っています1095-1092 = 3以上の数値

+2

ようこそスタックオーバーフロー! [良い質問をする方法](http://stackoverflow.com/help/how-to-ask)と[再現可能な例を与える方法](http://stackoverflow.com/questions/)の情報をお読みください。 5963269)。これは他の人があなたを助けることをはるかに容易にします。 – zx8754

+0

'stats'はパッケージの名前なので、変数名として使用しません。 – N8TRO

+0

しかし、あなたが主張するなら、 'stats $ temp2 < - ifelse(stats $ temp1 <= 11、cold、ifelse(stats $ temp1> = 22、" hot "、" med "))' – N8TRO

答えて

2

@ zx8754と@ N8TROは素晴らしい解決策(特にcut)を提供します。ここには再現可能な例があります。

set.seed(357) 
xy <- data.frame(temp = sample(0:50, size = 30, replace = TRUE)) 

xy[xy$temp <= 10, "feel"] <- "cold" 

xy[xy$temp > 10 & xy$temp < 30, "feel"] <- "ok" 

xy[xy$temp >= 30, "feel"] <- "hothothot" 

> head(xy) 
    temp  feel 
1 5  cold 
2 2  cold 
3 14  ok 
4 11  ok 
5 33 hothothot 
6 23  ok 
+1

また、「ok」で 'feel'を初期化し、' cold'と 'hothothot'の2つのサブ割り当てを行うこともできます。 –

+0

@docendodiscimus trueですが、このようにして、いずれの値も考慮されていない場合。 –

+0

私はあなたが意味するものを参照してください、それは有効なポイントです –

2

我々はcut()を使用して、以下のようにラベルを追加することができます。この結果の列は、あなたはそれが、我々はにそれをラップする必要がありますcharacterする必要がある場合は、factorであること

stats$temp2 <- cut(stats$temp1, c(0, 11, 22, Inf), labels = c("cold", "med", "hot")) 

as.character()

関連する問題