2017-04-06 2 views
1

X1はホームチームの列です。2つの列を比較し、3番目の列に結果を書き込む方法R

goals 
    X1 X2 
1 1 1 
2 4 0 
3 0 0 
4 2 1 
5 1 1 
6 1 1 
7 1 1 
8 0 0 
... 

ネストしたelseifを入力すると、コンソールに正しい結果が得られます。

ただし、データフレームを確認すると、「a」しかないため、データフレームが正しくない可能性があります。

> goals 
    X1 X2 winner 
1 1 1  a 
2 4 0  a 
3 0 0  a 
4 2 1  a 
5 1 1  a 
6 1 1  a 
7 1 1  a 
8 0 0  a 
... 

どこが間違っていますか?

+4

'ゴール$勝者< - ifelse(目標$ X1>目標$ X2、 "H"、ifelse(目標を$ X1 < ゴール$ X2、 "d"、 "a")) ' –

+1

ありがとうございました。カビールの説明と一緒に私は多くを学ぶことができました! – JohnnyS

答えて

0

:ここ

ifelse(test_expression,x,y) 

は、test_expressionは論理ベクトル(または強要できるオブジェクトである必要がありますあなたはあなたがしなければならないやりたいです論理的に)。戻り値は、test_expressionと同じ長さのベクトルです。

これがベクトルtest_expressionの対応する値がFALSE.Youがifelseがに割り当てられるべきではなく全体、ここでifelse内部に値を代入しようとしないべきである場合test_expressionの対応する値がTRUEまたはYからのものである場合、Xから要素を有し返さ新しいオブジェクト。

goals$winner <- ifelse(goals$x1 > goals$x2, "h", ifelse(goals$x1 < goals$x2, "d", "a")) 

Rコンソールで?ifelseを検索すると、より理解しやすくなります。

あなたはサブセットでifelse文を避けることができます。

df <- data.frame(x1 = c(1,4,0,2,1,1,1,0),x2=c(1,0,0,1,1,1,1,0)) 
df$winner <- NULL 
df[df$x1 > df$x2,"winner"] <- "h" 
df[df$x1 < df$x2,"winner"] <- "d" 
df[df$x1 == df$x2,"winner"] <- "a" 

回答:

df 
    x1 x2 winner 
1 1 1  a 
2 4 0  h 
3 0 0  a 
4 2 1  h 
5 1 1  a 
6 1 1  a 
7 1 1  a 
8 0 0  a 
> 
0

ifelse内の勝者の列が更新されるため、問題が発生します。あなたが正しいやり方でifelse使用していない

goals$winner <-ifelse(goals$X1 > goals$X2, "h",ifelse(goals$X1 < goals$X2, "d", "a")) 
関連する問題