R - 检查向量中的元素是否存在于 data.frame 中,如果不存在,则添加虚拟值

R - Check if element from vector exist in data.frame, and if not, add dummy values

具有活动向量:

campaignsTypes <- c("Social Media","Distribution","Nurture","Newsletter","Push")

和一个 data.frame 以及关于他们的信息:

out <- structure(list(Type = c("Distribution", "Newsletter", "Nurture", 
"Social Media"), Pageviews = c(42, 880, 17, 84)), .Names = c("Type", 
"Pageviews"), row.names = c(NA, -4L), class = "data.frame")

我想检查向量 campaignsTypes 中的所有元素是否都包含在 data.frame out 中,如果没有,则为这个缺失的广告系列创建一个包含虚拟值的新行。到目前为止,我可以检查是否不存在 campaigngType。但是,我在将 vector 中不存在的元素分配为手动插入的新行的第一列的值时遇到问题:

> ifelse(campaignsTypes %in% out$Type == FALSE,rbind(out, c(????,0)),"")
How to put the value of the missing campaign here?----------⤴

一种方法,

output <- rbind(out, campaignsTypes[sapply(campaignsTypes, function(i) !(i %in% out$Type))])
output$Pageviews[output$Pageviews == output$Type] <- 0
output
#          Type Pageviews
#1 Distribution        42
#2   Newsletter       880
#3      Nurture        17
#4 Social Media        84
#5         Push         0

您可以创建一个包含缺失行的新数据框,然后堆叠 两个数据框。

rbind(out, data.frame(Type=setdiff(campaignsTypes, out$Type),
                      Pageviews=0L))

结果:

          Type Pageviews
1 Distribution        42
2   Newsletter       880
3      Nurture        17
4 Social Media        84
5         Push         0