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

  • 本文关键字:两个 变量 数据帧 其他 显示 之间 r
  • 更新时间 :
  • 英文 :


我对这样的两个数据帧有一个小问题:第一个数据帧

     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.

我想创建一个新的数据帧,在对数据帧1的变量Num.Op和第二数据帧的变量Num.Op1进行比较后,我显示了两个变量:第一个是第二数据框的Num.Op1,第二个是v1,如果Num.Op的元素在Num.Op1中,则v1的值为1,如果不在,则为0,并且对于具有1的所有情况,还应当显示变量CCD_ 8和CCD_。类似这样的东西:

   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

我用比赛来证明,但我没有得到结果。

您想要使用merge函数。

首先,为第一个数据帧创建一个新列"v1",并用"1"填充:

df1$v1 <- 1

然后,您通过将两个原始数据帧合并在一起创建一个新的数据帧:

mergedDF <- merge(df1, df2, by=1, all.y=TRUE)

最后,将"0"分配给v1列中尚未"1"的值:

mergedDF$v1[is.na(mergedDF$v1)] <- 0

mergedDF现在应该包含您想要的内容。

# 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

最新更新