R 在来自不同数据帧的两个变量之间进行匹配,并显示来自两个数据帧的其他变量

R 在来自不同数据帧的两个变量之间进行匹配,并显示来自两个数据帧的其他变量,r,R,我对这两个数据帧有点小问题:Fist数据帧 Num.Op Bonus 381942 Y 382181 Z 382260 A 382266 A 和第二数据帧: Num.Op1 Site 381942 Ecua Auto S.A. 382181 Vallejo Araujo S.A. 382260 Automotores de la Sierra

我对这两个数据帧有点小问题:Fist数据帧

     Num.Op     Bonus
    381942        Y
    382181        Z
    382260        A
    382266        A
和第二数据帧:

    Num.Op1     Site
    381942  Ecua Auto S.A.
    382181  Vallejo Araujo S.A.
    382260  Automotores de la Sierra
    382266  Automotores de la Sierra
    382310  Vallejo Araujo S.A.
    382619  Vallejo Araujo S.A.
我想创建一个新的数据框,其中,在对第一个数据框中的变量
Num.Op
和第二个数据框中的变量
Num.Op1
进行比较之后,我显示了两个变量:第一个是第二个数据框中的
Num.Op1
,第二个是
v1
,如果
Num.Op
中的元素位于
Num.Op1
中,则
v1
的值为1,如果不在
Num.Op1
中,则值为0。对于所有具有1的情况,变量
site
bonus
都应显示。大概是这样的:

   Num.Op1   v1  Site                        Bonus
    381942    1  Ecua Auto S.A.                Y
    382181    1  Vallejo Araujo S.A.           Z
    382260    1  Automotores de la Sierra      A
    382266    1  Automotores de la Sierra      A
    382310    0  NA                            NA
    382619    0  NA                            NA

我用match证明,但我没有得到结果。

您想使用
合并
函数

# input data
df1 = read.table(text = ' Num.Op     Bonus
 381942        Y
 382181        Z
 382260        A
 382266        A', header = T)
df2 = read.table(text = '    Num.Op1     Site
    381942  "Ecua Auto S.A."
    382181  "Vallejo Araujo S.A."
    382260  "Automotores de la Sierra"
    382266  "Automotores de la Sierra"
    382310  "Vallejo Araujo S.A."
    382619  "Vallejo Araujo S.A."', header = T)

# load data.table, convert to data.table and set keys for merging
library(data.table)
dt1 = data.table(df1, key = "Num.Op")
dt2 = data.table(df2, key = "Num.Op1")

# the merge - add a v1 column to dt1, merge with dt2, whenever the merge fails,
# i.e. v1 is NA, set v1 to 0 and Site to NA (Bonus will be set to NA automatically)
result = dt1[, v1 := 1][dt2][is.na(v1), `:=`(v1 = 0, Site = NA_character_)]
result
#   Num.Op Bonus v1                     Site
#1: 381942     Y  1           Ecua Auto S.A.
#2: 382181     Z  1      Vallejo Araujo S.A.
#3: 382260     A  1 Automotores de la Sierra
#4: 382266     A  1 Automotores de la Sierra
#5: 382310    NA  0                       NA
#6: 382619    NA  0                       NA
首先,为第一个数据帧创建一个新列“v1”,并用“1”填充它:

df1$v1 <- 1

df1$v1
merge
with all.y=true我们也无法轻松读取这些数据。请使用dput提供数据。
mergedDF <- merge(df1, df2, by=1, all.y=TRUE)
mergedDF$v1[is.na(mergedDF$v1)] <- 0