我对这样的两个数据帧有一个小问题:第一个数据帧
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