如何基于作为条件存在的另一数据帧单元值来过滤一个数据帧?

时间:2019-04-23 04:45:25

标签: r

我的第一个数据帧为

feature  feature_weight    feature_desc
A        0.046891755        -0.831 < A      
B        -0.036292305       B <= -0.243     
C        0.008370983        0.317 < C       
D        0.007841638        0.212 < D

第二个数据帧为

variable   binning     percent
A          ar1         -0.224
A          ar2         0.715
A          ar3         -0.831
B          br1         -0.243
B          br2         -0.016
B          br3         0.128
C          cr1         0.102
C          cr2         0.317
C          cr3         -0.022
D          dr1         -0.522
D          dr2         0.212
D          dr3         -0.589

我需要将第二个数据帧中的合并值添加为第一个数据帧中的新列,但是只有那些从feature_desc列的字符数据类型中过滤掉的特定值,如下所示

feature  feature_weight    feature_desc   binning
A        0.046891755        -0.831 < A    ar3       
B        -0.036292305       B <= -0.243   br1   
C        0.008370983        0.317 < C     cr2   
D        0.007841638        0.212 < D     dr2

feature_desc是字符类型

2 个答案:

答案 0 :(得分:1)

一旦您过滤掉数字,我们就可以merge两个数据框来获取binning的值。

df1$value <- gsub("[^0-9\\.\\-]", "", df1$feature_desc) 

merge(df1, df2, by.x = c("feature", "value"), by.y = c("variable", "percent"))


#  feature  value feature_weight feature_desc binning
#1       A -0.831    0.046891755   -0.831 < A     ar3
#2       B -0.243   -0.036292305  B <= -0.243     br1
#3       C  0.317    0.008370983    0.317 < C     cr2
#4       D  0.212    0.007841638    0.212 < D     dr2

如果不需要,您可以稍后删除value列。

答案 1 :(得分:1)

我将数字过滤为new_values

gsub("[^0-9\\.\\-]", "", df1$feature_desc)

然后根据df1中的值删除df2中变量的重复项

df3 %>%  filter(percent %in% df1$new_values)

然后将两者合并

merge(df3, df4, by.x='variable', by.y='feature')