2016-08-11 8 views
1

私はステーションの名前に基づいてデータフレームのリストを持っている大量のデータセットを持っており、行のチェックアウト名とリターン名に基づいて数値で新しい列を作成したいと考えています。データのサンプルを以下に示します。ReturnKioskNameはその後、カウント値が0でなければなりませんよう特定のデータフレーム内の値に応じて、データフレームのリスト内に新しい列を作成するにはどうすればよいですか?

fz$'66th & Center' 
Bike CheckoutKioskName ReturnKioskName 
24583 191  66th & Center 66th & Center 
24584 191  66th & Center 66th & Center 
24585 191  66th & Center 66th & Center 
24586 191  66th & Center 66th & Center 
24587 191  66th & Center 66th & Center 
24588 191  66th & Center 66th & Center 
24589 11  66th & Center 66th & Center 
24590 11  66th & Center 66th & Center 
24591 11  66th & Center 66th & Center 
24592 11  66th & Center 66th & Center' 

私は、CheckoutKioskNameが同じであれば「に基づいて、カウント」という名前の新しい列を作成したいCheckoutKioskNameのISN」の場合リストの値の名前(この場合は '66th & Center')と同じでなければなりません。最後のオプションは、ReturnKioskNameがリストの値の名前と同じでない場合、カウント値はこれを行う私の試みは、if elseステートメントの下にあります。私は、列が要素であるとき、または列が文字であるときのどちらかを使用するとき、エラーが発生し続ける。

if(test$CheckoutKioskName == test$ReturnKioskName){ 
    test$count <- 0 
}else{ 
    if(test$ReturnKioskName != t){ 
    test$count <- -1 
    }else{ 
    if(test$CheckoutKioskName != t){ 
     test$count <- 1 
    } 
    } 
} 

私は、このタスクを完了するためにlapply使用する方法があると思いたいが、私はここにそれを使用するたびに失敗し続けています。

私は何か助けていただきありがとうございます。

答えて

1

私たちは、私のオリジナルのリストから私の小さな単一のデータフレームのために働くlapply

lapply(names(fz), function(nm) {fz1 <- fz[[nm]] 
    transform(fz1, Count = ifelse(CheckoutKioskName == ReturnKioskName, 0, 
       ifelse(CheckoutKioskName ! = rep(nm, nrow(fz1)), -1, 1)))}) 
+0

私はこれを動作させることはできません。それは私に各データフレームの長さを扱うエラーを与える。 – Brett

+0

@Brettコードに 'test $ ReturnKioskName'という誤字がありました。今は修正されています。 – akrun

+1

それは今完璧に動作します!ありがとうございました。 – Brett

0

どのステートメントを経由して、新しい列にフラグを保存してみてください。私は文字にテストされた列の変換をお勧めしますが、その後それは違いを作る場合、私はあなたのデータを再作成する時間がないので、試すことができませんでした;ように)

test$count[which(test$CheckoutKioskName == test$ReturnKioskName)] <- 0 

...と。トリックをする必要があります。

+0

た文を使用することができます。 test $ count [テスト用$ CheckoutKioskName == test $ ReturnKioskName] < - 0 test $ count [テスト用$ CheckoutKioskName!=名前(fz [1]))] < - -1 test $ returnKioskName!= names(fz [1]))] < - 1 私は37のdfを含むリストを持っています。私が今までやったのと同じことをする方法についての簡単な提案は、リスト全体のために? – Brett

+0

リストをループします。小さなデータセットの場合はすばやくすべきです。大規模なデータを扱う場合、akrunの提案はおそらくより高速です。 –

関連する問題