Nano Hash - криптовалюты, майнинг, программирование

сопоставление имен сложных строк во фрейме данных с использованием R

У меня есть два фрейма данных:

name1 name2
AaI08 BbZ09
AaB65 BbX02

и второй с кодом (без начального Aa или Bb), который содержит описание:

Code meaning
I08  Volvo
B65  Seat
Z093 BMW
X021 Fiat

Я хотел бы сопоставить первые два числа после буквы из второго фрейма данных и привести его к первому фрейму данных. Конечный результат должен выглядеть примерно так:

name1 name2
Volvo BMW
Seat  Fiat

моя интуиция состоит в том, чтобы использовать функцию grepl и str_extract(code, '[A-Z]\\d{2}') для сопоставления и сбора первых двух чисел после буквы соответственно.


Ответы:


1

Удалите первые два символа из строки, а затем выполните соединение.

library(dplyr)
df1 %>%
  mutate(Code = sub('..', '', name1)) %>%
  #If you want to remove initial Aa or Bb
  #mutate(Code = sub('^(Aa|Bb)', '', name1)) %>%
  inner_join(df2, by = 'Code')

#  Code name1 name2 meaning
#1  B65 AaB65 BbX02    Seat
#2  I08 AaI08 BbZ09   Volvo

В базе Р:

merge(transform(df1, Code = sub('..', '', name1)), df2, by = 'Code')
18.12.2020
  • отличный ответ большое спасибо! 18.12.2020
  • Ваше решение base-R должно быть раскручено. Выглядит просто, но очень элегантно. Может быть, небольшое объяснение того, что он делает для тех, кто найдет это позже? 18.12.2020
  • На самом деле базовый ответ R ничем не отличается от ответа dplyr. Он удаляет первые 2 символа из name1 и объединяет два фрейма данных на основе общей части, доступной в обоих фреймах данных. 18.12.2020

  • 2

    Используя базу R:

    sapply(d1, function(x) d2$meaning[match(substr(x,4,5),substr(d2$Code,2,3))]) %>% as.data.frame()
      name1 name2
    1 Volvo   BMW
    2  Seat  Fiat
    

    Используемые данные:

    d1
    # A tibble: 2 x 2
      name1 name2
      <chr> <chr>
    1 AaI08 BbZ09
    2 AaB65 BbX02
    d2
    # A tibble: 4 x 2
      Code  meaning
      <chr> <chr>  
    1 I08   Volvo  
    2 B65   Seat   
    3 Z093  BMW    
    4 X021  Fiat   
    
    18.12.2020

    3

    Использование gsub и регулярных выражений.

    f <- function(x) gsub("\\D+?(\\d{2}).*", "\\1", x)
    sapply(dat1, function(x) dat2$meaning[match(f(x), f(dat2$Code))])
    #      name1   name2 
    # [1,] "Volvo" "BMW" 
    # [2,] "Seat"  "Fiat"
    

    Данные:

    dat1 <- structure(list(name1 = c("AaI08", "AaB65"), name2 = c("BbZ09", 
    "BbX02")), class = "data.frame", row.names = c(NA, -2L))
    
    dat2 <- structure(list(Code = c("I08", "B65", "Z093", "X021"), meaning = c("Volvo", 
    "Seat", "BMW", "Fiat")), class = "data.frame", row.names = c(NA, 
    -4L))
    
    18.12.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..