R 在来自不同数据帧的两个变量之间进行匹配,并显示来自两个数据帧的其他变量
我对这两个数据帧有点小问题:Fist数据帧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
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$v1merge
with all.y=true我们也无法轻松读取这些数据。请使用dput提供数据。
mergedDF <- merge(df1, df2, by=1, all.y=TRUE)
mergedDF$v1[is.na(mergedDF$v1)] <- 0