0

次のような 2 つのデータ フレームには少し問題があります。

     Num.Op     Bonus
    381942        Y
    382181        Z
    382260        A
    382266        A

そして2番目のデータフレーム:

    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データ フレーム 1 の変数と 2 番目のデータ フレームの変数を比較した後、Num.Op12 つの変数を表示する新しいデータ フレームを作成したいと思います。 from の要素が含まれている場合は 1 で、含まれていない場合は 0 であり、変数が 1 の場合はすべて、表示する必要があります。このようなもの:Num.Op1v1v1Num.OpNum.Op1sitebonus

   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)

最後に、まだ「1」になっていない v1 列の値に「0」を割り当てます。

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

mergedDF には、必要なものが含まれているはずです。

于 2013-07-15T22:37:18.857 に答える