我有两个这样的数据框有点问题:拳头数据框
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
,v1
如果Num.Op
中的元素位于Num.Op1
,则site
将取0,如果isn,则{0}并且,对于所有具有1的情况,还应显示变量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
。像这样:
{{1}}
我用比赛证明但是我得不到结果。
答案 0 :(得分: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
答案 1 :(得分:0)
您想使用merge
功能。
首先,为您的第一个数据框创建一个新列'v1'并填入'1':
df1$v1 <- 1
然后通过将2个原始数据框合并在一起来创建新的data.frame:
mergedDF <- merge(df1, df2, by=1, all.y=TRUE)
最后,为v1列中尚未为'1'的值指定'0':
mergedDF$v1[is.na(mergedDF$v1)] <- 0
mergedDF现在应该包含你想要的内容。