Переименование уровней на основе коэффициентов другого столбца R

#r #dplyr #rename

Вопрос:

У меня есть большой фрейм данных, в котором имена (col1) должны быть вложены в имя местоположения (col2). В приведенном ниже примере «d» из col1 должно находиться в пределах «z» от col2, но указано как «y» в восьмом элементе. Я не могу просто переименовать «y» в col2, как это правильно в большинстве мест. Мне нужно переименовать «y» в «z» только тогда, когда col1 == «d». Это большой фрейм данных с несколькими примерами, поэтому также невозможно просто переименовать элемент

 col1lt;-c("a","b","c","d","a","b","c","d") col2lt;-c("x","y","z","z","x","y","z","y") dflt;-data.frame(col1,col2)  

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

1. как вы узнаете, что правильное сопоставление d-gt;z вместо d-gt;y того, чтобы, поскольку оба отображаются в ваших данных, но вы определяете приоритет первого

2. Вышесказанное-всего лишь пример. Из знаний о данных это явная ошибка. Например, сопоставление Техаса с Китаем вместо США

Ответ №1:

Это было бы легко, если бы вы могли создать фрейм данных lookup с правильной комбинацией col1 и col2 . Затем вы можете использовать только left_join свой исходный фрейм данных с lookup помощью .

 library(dplyr)  # Create a lookup table. In reality you probably need to create this with other methods. lookup lt;- df %gt;%  distinct() %gt;%  filter(!(col1 %in% "d" amp; col2 %in% "y"))  # join col1 to the lookup df2 lt;- df %gt;%  select(-col2) %gt;%  left_join(lookup, by = "col1") df2 # col1 col2 # 1 a x # 2 b y # 3 c z # 4 d z # 5 a x # 6 b y # 7 c z # 8 d z  

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

1. Большое спасибо. Я не упоминал,что есть несколько других столбцов с уникальными значениями, поэтому мне пришлось определить столбцы в различных(col1, col2), чтобы предотвратить поиск такой же длины, как мой набор данных