我有一个数据集,我想在其中创建一个新列,在可用时从另一列中获取现有值,当没有值可用时,它应该采用过去一年的值。
示例,我有以下数据:
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用户,但我已经广泛搜索过,所以我希望我没有问过多余的问题!
提前谢谢你们所有人!
答案 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"]])))