стандартизация идентификаторов клиентов на основе того же названия компании - PullRequest
0 голосов
/ 23 октября 2018

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

До

    Customer.Ids       Company        Location
    1211            Lightz           New York
    1325            Comput.Inc       Seattle 
    1756            Lightz          California 

После

    Customer.Ids     Company        Location
    1211             Lightz            New York
    1325             Comput.Inc        Seattle 
    1211             Lightz           California

Идентификаторы клиентов для двух компаний теперь одинаковы.Какой код будет лучшим для этого?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вот способ использования пакета dplyr.Он заменит все идентификаторы в соответствии с первым экземпляром для любой компании -

df %>%
  group_by(Company) %>%
  mutate(
    Customer.Ids = Customer.Ids[1]
  ) %>%
  ungroup()

# A tibble: 3 x 3
  Customer.Ids Company    Location  
         <int> <fct>      <fct>     
1         1211 Lightz     New York  
2         1325 Comput.Inc Seattle
3         1211 Lightz     California
0 голосов
/ 23 октября 2018

Мы можем использовать match здесь, поскольку он возвращает первую совпадающую позицию.Мы можем match Company с Company.Согласно ?match

match возвращает вектор позиций (первых) совпадений его первого аргумента во втором.

df$Customer.Ids <- df$Customer.Ids[match(df$Company, df$Company)]
df

#  Customer.Ids    Company   Location
#1         1211     Lightz    NewYork
#2         1325 Comput.Inc    Seattle
#3         1211     Lightz California

где

match(df$Company, df$Company) #returns
#[1] 1 2 1

Некоторые другие опции, использующие sapply

df$Customer.Ids <- df$Customer.Ids[sapply(df$Company, function(x)
                               which.max(x == df$Company))]

Здесь мы перебираем каждый Company и получаем первый экземпляр его вхождения.


Или другой вариант, использующий ave, который следует той же логике, что и @Shree, для получения первого вхождения по группе.

with(df, ave(Customer.Ids, Company, FUN = function(x) head(x, 1)))
#[1] 1211 1325 1211
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...