R:ifelse语句:比较data.frames

R:ifelse语句:比较data.frames,r,if-statement,dataframe,R,If Statement,Dataframe,我有两个数据帧,我试图比较一个数据帧和另一个数据帧中的值 如果表1和表2中的值都匹配,则表2中的第三个值将插入表1 示例表格我的DF words number 1 it 1 2 was 2 3 the 3 4 LTD QTY 4 5 end 5 6 of 6 7 winter 7 表x.sub lev_dist Var1 Var2 31

我有两个数据帧,我试图比较一个数据帧和另一个数据帧中的值 如果表1和表2中的值都匹配,则表2中的第三个值将插入表1

示例表格我的DF

    words number
 1      it      1
 2     was      2
 3     the      3
 4     LTD QTY  4
 5     end      5
 6      of      6
 7  winter      7
表x.sub

   lev_dist    Var1    Var2
31        1 LTD QTY LTD QTY
我想说的是,如果x.sub中的Var1等于MyDF中的单词,那么在MyDF中单词旁边的第三列中插入x.sub.lev_dist

我的尝试在下面,但结果中始终产生3,而不是lev_值

mydf$lev_dist <- ifelse(test = (mydf$words == x.sub$Var1),x.sub$Var1,0)

有人能帮忙吗

这个
x.sub$Var1
是一个
因子
列。因此,当我们做
ifelse
时,我们得到因子的数值
级别。将
ifelse中的
x.sub$Var1
替换为
as.character(x.sub$Var1)

 mydf$lev_dist <- ifelse(mydf$words == as.character(x.sub$Var1)),
                        x.sub$lev_dist,0)

mydf$lev_distx.sub$Var1
是一个
因子
列。因此,当我们做
ifelse
时,我们得到因子的数值
级别。将
ifelse中的
x.sub$Var1
替换为
as.character(x.sub$Var1)

 mydf$lev_dist <- ifelse(mydf$words == as.character(x.sub$Var1)),
                        x.sub$lev_dist,0)

mydf$lev_dist您也可以使用
merge

x.sub = setNames(x.sub,c('lev_dist','words','Var2'))

df_ = merge(df, x.sub[,1:2], by='words', all=T)
df_[is.na(df_)]=0

# >df_
#    words number lev_dist
#1     end      5        0
#2      it      1        0
#3 LTD QTY      4        1
#4      of      6        0
#5     the      3        0
#6     was      2        0
#7  winter      7        0

您还可以使用
合并

x.sub = setNames(x.sub,c('lev_dist','words','Var2'))

df_ = merge(df, x.sub[,1:2], by='words', all=T)
df_[is.na(df_)]=0

# >df_
#    words number lev_dist
#1     end      5        0
#2      it      1        0
#3 LTD QTY      4        1
#4      of      6        0
#5     the      3        0
#6     was      2        0
#7  winter      7        0

检查x.sub$Var1是否为系数。在这种情况下,尝试
as.character(x.sub$Var1),0)
您绝对正确……这是一个非常严重的错误,但感谢您选择它……最终的答案是:mydf$lev_dist您还可以尝试使用
data.table
包及其二进制连接来高效地解决它,这是沿着
库(data.table)进行的;临时检查x.sub$Var1是否为系数。在这种情况下,尝试
as.character(x.sub$Var1),0)
您绝对正确……这是一个非常严重的错误,但感谢您选择它……最终的答案是:mydf$lev_dist您还可以尝试使用
data.table
包及其二进制连接来高效地解决它,这是沿着
库(data.table)进行的;临时雇员