R匹配数据帧不同行中的字符串

标签 r dataframe match lapply

我有一个包含条件列及其值的数据框,我有一个仅包含条件的数据框,我想通过匹配条件来提取它们的值。

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

当条件在不同的列时,我不知道如何匹配它们。感谢您的帮助。

最佳答案

我们可以使用 data.table 中的 melt(它可以采用多个 measure 列,然后与第二个数据集进行连接(' df2') 'Name' 和 'Style' 列上。

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

关于R匹配数据帧不同行中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40543066/

相关文章:

r - 在 R4.0.0 中合并数据帧比 R3.6.3 慢 60 倍?

r - 如何用R中的不同子串替换一个子串?

python - 从一列列表中的每个列表中获取第一个元素

r - 计算 R 数据框中每一列的百分位数

javascript - 我的字符串与正则表达式 Javascript 不匹配的原因

r - 从其他脚本调用 R 脚本

R: ggplot2 使两个 geom_tile 图具有相等的高度

python - PySpark 将字典的字符串化数组分解成行

Java:使用正则表达式 .*-\\d+{.*}\\d+-.* 引发 PatternSyntaxException

javascript正则表达式在char一次拆分匹配,而不是多个