将数据从一个数据帧写入R中另一个数据帧的新列

时间:2016-11-10 06:17:58

标签: r for-loop dataframe

我在R. data中有两个数据框,一个商店中每个部门每月销售额的框架,如下所示:

dataframe named data

虽然averages是一个平均销售额超过每个部门所有月份的框架,但看起来像这样:

dataframe named averages

我想要做的是向data添加一列,其中包含每个部门的平均销售额(averages的第3列)。所以现在我有一个avg列全部为零,我希望它包含该行中列出的任何部门的总体平均销售额。这是我现在的代码:

for(j in 1:nrow(avgs)){
  for(i in 1:nrow(data)){
    if(identical(data[i,4], averages[j,1])){
      gd[i,10] <- avgs[j,3] } } }

运行循环后,avg中的data列仍然全为零,这让我觉得if(identical(data[i,4], averages[j,1]))始终在评估FALSE ...但为什么这会是吗?如何解决此问题?是否有更好的方法来执行此操作?

2 个答案:

答案 0 :(得分:0)

您在寻找merge功能吗?

merge(x = data, y = avgs, by = "departmentName", all.x=TRUE)

答案 1 :(得分:-2)

我会通过这样做来使用dplyr:

dplyr::full_join(data, averages, by = "departmentName")

关于dplyr(除了快速)之外的好处是它有一个非常简单的语法。此外,如果您的两个表具有不同名称的变量,那么也可以指定。想象一下,表数据中有data_departmentName,表中的平均值为avgs_departmentName:

dplyr::full_join(data, averages, by = c("data_departmentName" = "averages_departmentName"))

然后,如果您只想要第二个数据集中的特定列,我会过滤数据集。如果您知道您的数据已订购且具有相同的长度,那么您可以将其添加为:

data$avgs <- averages$avgs

但我宁愿先加入,然后过滤。