2016-02-13 30 views
1

聲明我有下面的示例數據:如果數據幀

A = data.frame(x=c('x','x','y','y','z','z'), j=c(1,1,1,2,2,3) ) 
A$z[A$x=="x"]=1 
A$z[A$x=="y"]=1 
A$z[is.na(A$z)]=0 

而且我想創建一個使用相同柱"z"新列​​1爲條件,並採取"x"列的值。

我用下面的語句,但有一條警告消息

if(A$z==1)A$Test=A$z 

警告消息: 在如果(A $ Z^== 1)$測試= A $ Z: 條件有長度> 1,只有第一個元素將被使用

我該如何解決這個問題?

+1

'我下面的示例data' - 很高興見到你,'A' ;-) –

+0

A [ 「測試」< - ifelse( A $ z == 1,A $ x,9) – vaettchen

+0

Thanks @ vaettchen,但列返回數字而不是列「x」的確切值 –

回答

1

創建test變量作爲數據框的一部分,並使用ifelse()添加適當的值。試想一下:

A$Test = ifelse(A$z==1, A$z, NA) 
3

我們還可以做

A$Test <- NA^(A$z!=1)*A$z 
+0

我認爲這是一個有趣的慣例,R開發者團隊通過將'NA^0'定義爲'1'來選擇它。我看到它的方式不是數學上的嚴謹(我寧願期待'NaN'),但是爲了編程和「編碼打高爾夫球」這絕對是一個很好的功能。 – RHertel

+0

@RHertel這是一個很好的功能,否則,我們必須在很多情況下使用'ifelse'。 – akrun