2016-05-13 4 views
3

フィールドを特定のデータフレームに追加し、それを同じデータフレーム内の既存のフィールドと同じに設定する場合異なる(既存の)フィールドの条件。データフレームの値を新しいフィールドが別のフィールドと同じになるようにするR

is.even <- function(x) x %% 2 == 0 

df <- data.frame(a = c(1,2,3,4,5,6), 
       b = c("A","B","C","D","E","F")) 

df$test[is.even(df$a)] <- as.character(df[is.even(df$a), "b"]) 

> df 
    a b test 
1 1 A NA 
2 2 B B 
3 3 C NA 
4 4 D D 
5 5 E NA 
6 6 F F 

しかし、私はそれはこれよりもずっと良く行うことができます。この気持ちを持っている:

私は、この作品を知っています。

+2

'ifelse'を見上げて。それはまさにあなたが望むものでなければなりません。 – shreyasgm

+2

私は@shreyasgmの提案を詳しく説明します: 'df $ test < - ifelse(is.even(df $ a)、as.character(df $ b)、NA)' –

答えて

2

それは非常に簡単だdata.tableを使用して

library(data.table) 
dt = data.table(a = c(1,2,3,4,5,6), 
       b = c("A","B","C","D","E","F")) 

dt[is.even(a), test := b] 

> dt 
    a b test 
1: 1 A NA 
2: 2 B B 
3: 3 C NA 
4: 4 D D 
5: 5 E NA 
6: 6 F F 
+1

' data.tableは正しく、私は推測します。 (正当な) 'ifelse'ソリューションよりはるかにエレガントに見えます。ありがとう。 –

+0

パフォーマンスと同様に構文上の理由からも、通常のdata.framesに比べてdata.tableの方がはるかに優れています。その答えがあなたの質問に適切に対応していると思うなら、それを受け入れることを検討してください。 – Tchotchke

関連する問題