0

我对像这样的两个数据框有一点问题:拳头数据框

     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来自第二个数据框,第二个是v1v1将采取 valor如果来自的元素在其中,则为 1 Num.OpNum.Op1如果不在,则为 0,并且对于所有具有 1 的情况,变量sitebonus应显示。像这样的东西:

   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

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

4

2 回答 2

0
# 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
于 2013-07-15T22:34:36.743 回答
0

您想使用该merge功能。

首先,为您的第一个数据框创建一个新列“v1”并用“1”填充它:

df1$v1 <- 1

然后通过将 2 个原始数据框合并在一起来创建一个新的 data.frame:

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

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

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

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

于 2013-07-15T22:37:18.857 回答