Поиск Dataframe в r для строки, используя предопределенную таблицу и добавить соответствующий столбец

1

Вот примерный кадр данных

     # create a sample test scenarios
data <- rbind(c("Cisco Catalyst 3850 Series Ethernet Stackable Switch","ports"), c("Cisco 7200 Series Routers", "Ports"),
              c("Cisco Catalyst 3560-CX Series Switches", "Ports"), c("Data Center Switches", "Ports"), 
              c("SW_3560_IDF1d_1879.ccs.ccctov.org", "Ports")) # sample data

Таблица строк для значений

3850 - 50
7200 - 2
3560 - 60
Data Center - 240
3560 - 60

Конечный выходной образец:

finaldata <- rbind(c("Cisco Catalyst 3850 Series Ethernet Stackable Switch","ports", 50), c("Cisco 7200 Series Routers", "Ports", 2),
          c("Cisco Catalyst 3560-CX Series Switches", "Ports", 60), c("Data Center Switches", "Ports", 240), 
          c("SW_3560_IDF1d_1879.ccs.ccctgov.org", "Ports", 60)) # sample data

Цените свою помощь или руководство!

  • 0
    Просто data.frame точка, что у вас есть в data , это matrix , а не data.frame .
Теги:
string
dataframe

1 ответ

3
Лучший ответ

Мы можем использовать некоторое регулярное выражение и recode из dplyr

library(dplyr)
newColumn <- recode(sub(".*(3850|7200|3560|Data Center).*", "\\1", data[,1]), 
                    '3850' = 50, 
                    '7200' = 2,
                    '3560' = 60,
                    'Data Center' = 240)

cbind(data, newColumn)

                                                                    newColumn
[1,] "Cisco Catalyst 3850 Series Ethernet Stackable Switch" "ports" "50"     
[2,] "Cisco 7200 Series Routers"                            "Ports" "2"      
[3,] "Cisco Catalyst 3560-CX Series Switches"               "Ports" "60"     
[4,] "Data Center Switches"                                 "Ports" "240"    
[5,] "SW_3560_IDF1d_1879.ccs.ccctov.org"                    "Ports" "60"     

Немного другой способ сделать это:

codes <- sub(".*(3850|7200|3560|Data Center).*", "\\1", data[,1])
newCodes <- list('3850' = 50, '7200' = 2, '3560' = 60, 'Data Center' = 240)
cbind(data, recode(codes, !!!newCodes))
  • 0
    Хороший ответ. Быстрый запрос - есть ли способ заставить recode() использовать таблицу поиска / именованный вектор в качестве входных данных?
  • 0
    @ thelatemail посмотри мои изменения, я не уверен, что это то, что ты просил.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню