R:根据值和向量填充列

时间:2016-04-22 08:42:02

标签: r

我的数据框users包含id列和country

id                  country
1                   France
2                   United States
3                   France

我想添加一个新列salary,该列取决于给定salary的平均country

我的第一个想法是创建一个(country, salary)的配置向量,如下所示:

salary_country <- c(
   "France"=45000,
   "United States"=50000,
   ...)

然后像这样创建列(使用dplyr):

tbl_df(users) %>% 
  mutate(salary = ifelse(country %in% names(salary_country), 
                         salary_country[country], 
                         0))

它像魅力一样运行。如果我的salary_country向量中不存在该国家/地区,则salary等于0,否则它等于给定的salary

但是,在非常大的数据框架上它非常慢并且非常冗长。

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用match

salary_country[match(users$country, names(salary_country))]

或者去data.table

dt = data.table(salary=salary_country, country=names(salary_country))

dt[setDT(users), on='country']

#   salary       country id
#1:  45000        France  1
#2:  50000 United States  2
#3:  45000        France  3