2016-11-25 17 views
0

私は3つのデータフレームを持っています。 1つは数字のセット全体を含んでいます。第2および第3のデータフレームは、ある特徴(タイプ1またはタイプ2)を有するこれらの数字のサブセットを含む。私がしたいのは、これらのデータフレームを1つにまとめて、各番号がタイプ1またはタイプ2でチェックされるようにすることです。他のデータフレームの値と一致するラベル値

例:fstottをマージした後

numbers <- c("+333","+334", "+335", "+443", "+444", "+445", "+553", "+554", "+555") 
typeone <- c("+333","+334", "+335", "+443") 
typetwo <- c("+335", "+443", "+444", "+445") 
fs <- data.frame(numbers)   
to<- data.frame(typeone) 
tt<- data.frame(typetwo) 

望ましい結果:あなたが欲しいしかし、その後、あなたは新しい論理列を変更することができます

data.frame(numbers = numbers, 
       typeone = numbers %in% typeone, 
       typetwo = numbers %in% typetwo) 

numbers typeone typetwo 
1 333   yes 
2 334   yes 
3 335   yes  yes 
4 443   yes  yes 
5 444     yes 
6 445     yes 
7 553  
8 554  
9 555  

答えて

2

これを試してみてください。

+0

Reduceを使用する: 'data.frame(番号=番号、 typeone = ifelse(数字 typetwo = ifelse(数字の%typetwo、 "yes"、 "")) –

+1

はい、それは最も簡単な解決策ですが、使用すると利点はありません論理上のバイナリ文字列。そこで私はそれをOPに残しました。 –

+0

@AndreyKolyadinあなたは正しいです。これは、誰かが提案したように "yes"ルートを通過する場合、論理的に再変換せずに、サブセット(必要に応じて)や索引付けが容易になります。さらに、 'ifelse'を使用すると、プロセスが不必要に遅くなる可能性があります – akrun

2

順次結合を試すことができます。かなりの列名をそのまま使用するには、names(to) <- c("numbers", "typeone")などの名前をttに変更することができます。

to$mhm <- "yes" 
tt$mhm <- "yes" 

out <- merge(fs, to, by.x = "numbers", by.y = "typeone", all.x = TRUE) 
merge(out, tt, by.x = "numbers", by.y = "typetwo", all.x = TRUE) 

    numbers mhm.x mhm.y 
1 +333 yes <NA> 
2 +334 yes <NA> 
3 +335 yes yes 
4 +443 yes yes 
5 +444 <NA> yes 
6 +445 <NA> yes 
7 +553 <NA> <NA> 
8 +554 <NA> <NA> 
9 +555 <NA> <NA> 

それともlistでデータセットを置き、同じ列名を設定し、この多分merge

Reduce(function(...) merge(..., by= "numbers", all.x=TRUE), 
     list(fs, setNames(to, "numbers"), setNames(tt, "numbers"))) 
+0

@akrunはこれを編集して私の質問を改善することができます。 –

関連する問題