Мы можем использовать 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