2016-11-11 3 views
3

私は条件とその値の列を持つデータフレームを持っており、条件付きのデータフレームしか持っていません。Rはデータフレームの異なる行にある文字列を一致させます

df1: 
Name Style Price Style Price Style Price 
Gary A  100  AB  300  B  200 
Johnson AB  200  B  700  A  300 
Marsha AC  300  C  500  A  400 
Watson A  400  B  200  AB  500 
Emma C  500  B  100  BC  600 

df1 = structure(list(Name = c("Gary", "Johnson", "Marsha", "Watson", 
"Emma"), Style = c("A", "AB", "AC", "A", "C"), Price = c(100L, 
200L, 300L, 400L, 500L), Style.1 = c("AB", "B", "C", "B", "B" 
), Price.1 = c(300L, 700L, 500L, 200L, 100L), Style.2 = c("B", 
"A", "A", "AB", "BC"), Price.2 = c(200L, 300L, 400L, 500L, 600L 
)), .Names = c("Name", "Style", "Price", "Style.1", "Price.1", 
"Style.2", "Price.2"), class = "data.frame", row.names = c(NA, 
-5L)) 

df2: 
Name Style 
Gary AB 
Johnson A 
Marsha C 
Watson B 
Emma BC 

df2 = structure(list(Name = c("Gary", "Johnson", "Marsha", "Watson", 
"Emma"), Style = c("AB", "A", "C", "B", "BC")), .Names = c("Name", 
"Style"), class = "data.frame", row.names = c(NA, -5L)) 

desired output: 
Name Style Price 
Gary AB  300 
Johnson A  300 
Marsha C  500 
Watson B  200 
Emma BC  600 

条件が異なる列にある場合、どのように一致させるかわかりません。ご協力ありがとうございました。

答えて

2

我々は、複数のmeasure columsnを取った後、第2のデータセット(「DF2」)に参加on「名前」と「スタイル」の列を行うことができます(data.tableからmeltを使用することができます。

library(data.table) 
melt(setDT(df1), measure = patterns("Style", "Price"), 
    value.name = c("Style", "Price"))[df2, on = c("Name", "Style")][, variable := NULL][] 
#  Name Style Price 
#1: Gary AB 300 
#2: Johnson  A 300 
#3: Marsha  C 500 
#4: Watson  B 200 
#5: Emma BC 600 
+0

ごめん何スタイル、パターン、フォーマットのように名前が異なる場合は、value.nameにすべての名前を追加しますか? –

+0

@PeterChungあなたは 'スタイル'、 'スタイル'などを指定しましたか? 'measure = patterns(" [スタイル "、"価格 "、"パターン "、"書式 ") – akrun

+0

あなたは、列の4パターン、はいそれらを指定する必要があります –

関連する問題