R根据几个标准填充列

时间:2017-07-11 15:02:14

标签: r

我有一个数据集,我想在其中创建一个新列,在可用时从另一列中获取现有值,当没有值可用时,它应该采用过去一年的值。

示例,我有以下数据:

Date      Market   Campaign    Impressions
1/1/2017  SE       Home        150
1/2/2017  SE       Home        100
1/1/2017  GB       Home        50
1/2/2017  GB       Home        55
1/1/2018  SE       Home        NA
1/2/2018  SE       Home        NA

我想写一些能为我提供的东西:

Date      Market   Campaign    Impressions  Future_impressions
1/1/2017  SE       Home        150          150
1/2/2017  SE       Home        100          100
1/1/2017  GB       Home        50           50
1/2/2017  GB       Home        55           55
1/1/2018  SE       Home        NA           150
1/2/2018  SE       Home        NA           100

我已设法使用以下内容填充Future_impressions与历史月份的展示次数:

df$Future_impressions[is.na(df$Impressions)] <- NA

但我不知道未来几个月会如何填充。我基本上想写一些说: - 如果印象数= NA - 那么比赛(日期减去12个月)和匹配市场和活动并检索印象数

我是一个非常新的R用户,但我已经广泛搜索过,所以我希望我没有问过多余的问题!

提前谢谢你们所有人!

1 个答案:

答案 0 :(得分:1)

以下是使用apply

的选项
df$Date <- as.Date(df$Date,'%m/%d/%Y')

get.last.year <- function(dt, mk, cp){
  ly <- as.POSIXlt(dt)
  ly$year <- ly$year - 1
  ly <- as.Date(ly)
  x <- df[df$Date == ly & 
         df$Market == mk & 
         df$Campaign == cp, "Impressions"]
  return(x)
}

df$Future.impressions <- apply(df, 1, function(x) ifelse(!is.na(x[["Impressions"]]), x[["Impressions"]], get.last.year(x[["Date"]], x[["Market"]], x[["Campaign"]])))