条件の列とその値を含むデータフレームがあり、条件のみを含むデータフレームがあります。条件を一致させて値を抽出したいと思います。
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
条件が異なる列にある場合、それらを一致させる方法がわかりません。ご協力ありがとうございました。
我々は使用することができますmelt
からdata.table
、複数取ることができた(measure
columsnをした後、第2のデータセット(「DF2」)に参加しないon
「名前」と「スタイル」の列。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加