#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), чтобы предотвратить поиск такой же длины, как мой набор данных