Как отфильтровать один фрейм данных на основе значений ячеек другого фрейма данных, представленных в качестве условия?

#r

#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 — это символьный тип

Комментарии:

1. gsub(«[^0-9\.\-]», «», df1$feature_desc) : я мог бы отфильтровать цифры из столбца с помощью gsub

2. Я думаю, что ваш вопрос неясен, потому что он удаляет сравнение, а затем выполняет слияние с равенством

Ответ №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 столбец позже, если это не требуется.

Ответ №2:

Я отфильтровал цифры как new_values

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

Затем удалены дубликаты переменной в df2 на основе значения из df1

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

затем объединили оба

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