2017-02-20 8 views
0

この例のデータセットと希望する結果をよく見て、この質問の目的を確認してください。私が探しているのは、合併したデータセットソリューションではありません。だから私はここでも答えは見つけられませんでした:How to join (merge) data frames (inner, outer, left, right)?、ここではUse apply() to assign value to new columnです。新しいcolnamesに条件を満たしている場合、値を割り当てるためのソリューションを指します。ここでforループ内の新しい列にセル値を割り当てます。

私がやりたいものの再現性のあるイラスト:

Email 
1 [email protected] 
2 [email protected] 
3 [email protected] 
4 [email protected] 
5 [email protected] 

    Code Email 
1 Z001 [email protected] 
2 Z002 [email protected] 
3 Z003 [email protected] 
4 Z004 [email protected] 
5 Z005 [email protected] 

所望の出力:これは、次の例のデータセットになり

Email <- as.factor(c("[email protected]", "[email protected]", "[email protected]","[email protected]", "[email protected]")) 
dataset1 <- data.frame(Email) 


Code <- as.factor(c("Z001", "Z002", "Z003","Z004","Z005")) 
Email <- as.factor(c("[email protected]", "[email protected]", "[email protected]", "[email protected]","[email protected]")) 
dataset2 <- data.frame(Code, Email) 

Email  Z002 Z004 
    1 [email protected] NA  1 
    2 [email protected] 1  NA 
    3 [email protected] NA  NA 
    4 [email protected] NA  NA 
    5 [email protected] NA  NA 

をだから私dataset2のEmailがdataset1に存在するかどうかをチェックするループを作成したい場合、この条件が真である場合dataset2の電子メールに関連付けられたコードが、この観測のセル値として1を持つdataset1に新しい列名として割り当てられていることを確認します。これを達成しようとする私の試みと、望ましい出力の例は、質問を明確にしています。

(私はそれが間違っている知っているが、私の意図を示している)、それを修正するために私自身の試み:

for(i in 1:nrow(dataset2)){ 
    if(dataset2$Email[i] %in% dataset1$Email) 
    dataset1[,dataset2$Code[i]] <- dataset2$Code[i] 
    dataset1[,dataset2$Code[i]][i] <- 1 
} 

は素晴らしいことだ、誰もが私を助けることができれば。

答えて

1

dataset2は「ロング」形式です。Code列を複数の列に変更すると、「ワイド」形式に変更されます。したがって、結合に加えて、長時間から広範囲に変換する必要があります - this R-FAQ is a good read on that。この2つの操作を組み合わせると、次のようになります。

dat = merge(dataset1, dataset2, all.x = T) ## left join 
dat$value = 1 ## add the value we want in the result 
## convert long to wide 
result = reshape2::dcast(dat, Email ~ Code, value.var = "value", drop = T) 
result["NA"] = NULL ## remove the NA column that is added 
result 
#  Email Z002 Z004 
# 1 [email protected] NA 1 
# 2 [email protected] 1 NA 
# 3 [email protected] NA NA 
# 4 [email protected] NA NA 
# 5 [email protected] NA NA 
+0

ありがとうございました!私はあなたの助けが大いに評価されるようにこれを長い間探してきました:) – Floris

関連する問題