我需要使用许多客户ID之一,并将其标识为所有完全相同的公司名称。
之前
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
两家公司的客户ID现在相同。哪种代码最适合呢?
答案 0 :(得分:1)
我们可以在此处使用match
,因为它返回第一个匹配位置。我们可以将match
Company
与Company
一起使用。根据{{1}}
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
的另一个选项(其遵循与@Shree相同的逻辑)来按组进行首次出现。
ave
答案 1 :(得分:0)
这是使用dplyr
软件包的一种方法。它将取代所有公司的第一个实例的所有ID-
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