2016-08-16 9 views
0

私はRの初心者です.2つのデータセットをID列に基づいて結合したいと思います。データセット2のID番号がデータセット1に存在する場合、データセット2のこの特定の行のデータをデータセット1の行に追加します。条件に基づいたrのデータのマージと新しい列の作成

第2に、一致がある場合は、その特定の行/マッチに対するマッチと呼ばれる新しい列の「1」と、マッチしなかった場合は「0」となる。

例:追加された列と

Dataset 1: 

Id  category 
123 3 
124 1 
125 2 

Dataset 2: 

Id  score category 
123 0.24 3 
124 0.83 1 
126 0.92 2 

決勝例:私はこのこれまでに試した

Id  score category match 
123 0.24 3   1 
124 0.83 1   1 
125 NA  1   0 
126 0.92 2   1 

(および他のいくつかの組み合わせ)が、それは私に良い結果を得られませんでした。

data <- merge(df1, df2, by ="ID" , all.x = TRUE) 

本当に助けていただきありがとうございます。

再現コード:

df1 <- data.frame(ID=c("123","124","125"), category=c(3,1,2) 
df2 <- data.frame(ID=c("123","124","126"), score=("0.24","0.83","0.92"), category=c("3","1","2") 
+0

を呼び出すことにより、出力を更新あなたは 'character' NAを持っていますか?引用符で囲むべきではありません。入力データが示され、再現可能な例の 'df2'は一致しません。バイナリ列を作成するには、 '%in%'を 'as.integer'と一緒に使用してください。 – akrun

+0

期待される出力と再現可能なコードが同じであるあなたのサンプルデータは同じではありません。あなたはID「126」を持っていませんか? – user5249203

+1

データフレーム(内部、外部、左、右)を結合(マージ)する方法は?](http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner) -outer-left-right) –

答えて

0

あなたはほとんどそこにあります。あなたの例を少し変更しました。

df1 <- data.frame(ID = c(123, 124, 125), 
        category=c(3, 1, 2)) 
df1 

df2 <- data.frame(ID = c(123, 124, NA), 
        score = c(0.24, 0.83, 0.35), 
        category = c(3, 1, 2)) 
df2 

df2$match <- 1 
df2 

data <- merge(df1, df2, by = c("ID", "category") , all.x = TRUE) 
data$match[is.na(data$match)] <- 0 
data 
+0

これは動作しません。 'all = TRUE'である必要があります。また、OP – Sotos

+1

ごとに' match'変数を作成する必要があります。ありがとうございます!それは私のために働くようだった。 – Veraaa

0

提供したデータに適切な結果を提供できる場合は、必要に応じてデータを更新できます。ただし、次の手順でdf1に一致するdf2のIDベースのフラグを立てることができます。

update:y値ではなくx値のみを表示するように見えます。 all.x =T

data <- merge(df1, df2, by = c('ID', 'category') , all.x = T) 
data$match <- ifelse(data$ID %in% df2$ID, 1, 0) 

出力

ID category score match 
1 123  3 0.24  1 
2 124  1 0.83  1 
3 125  2 <NA>  0 

データ

df1 <- data.frame(ID=c("123","124","125"), category=c(3,1,2)) 
df2 <- data.frame(ID=c("123","124","126"), score= c("0.24","0.83","0.92"), 
       category=c(3,1,2)) 
+0

'by = c( 'ID'、 'category')' – Sotos

+0

@Sotosに感謝します。 – user5249203

関連する問題