首页 > 解决方案 > 在满足R中的多个if条件后将值从一个数据帧粘贴到另一个数据帧

问题描述

我正在尝试将一个数据框中的唯一值粘贴到单独数据框中新创建的列中。该功能需要满足多个条件。在这种情况下,两个数据帧中的“日期”和“产品”值必须相同。

我已经尝试过 if 和 while 功能,但我似乎无法解决问题。

sales1 <- data.frame("Day" = c(01,02,03,04), "Product" = c("B","A","D","C"), "salesVol" = c(12,31,3,90))
sales2 <- data.frame("Day" = c(01,01,01,01,02,02,02,02,03,03,03,03,04,04,04,04), "Product" = c("A","B","C","D","A","B","C","D","A","B","C","D","A","B","C","D"), "Price" = c(9,3,4,5,7,10,5,8,4,5,11,3,12,4,7,6))
for (i in 1:nrow(sales1)){
  if (sales1$Product == sales2$Product
      && sales1$Day == sales2$Day)
  {
    sales1$dailyPrice[i] <- sales2$Price[i]
  }
}

请注意,sales2 中只能有一个唯一的日期/产品组合。

也试过:

while (sales1$Product == sales2$Product
       && sales1$Day == sales2$Day){
    sales1$dailyPrice <- sales2$Price
}

生成的 sales1 数据框应为:

Day Product salesVol dailyPrice
1    B        12       3
2    A        31       7
3    D        3        3
4    C        90       7

即,当第 2 天且产品为“A”时,根据 sales2,“dailyPrice”为 7。

然而,充其量我得到不正确的值,最坏的情况是(上面的代码)没有任何东西被粘贴。也没有错误信息。谢谢。

标签: rdataframeif-statement

解决方案


这是你想要的吗?

merge(sales1,sales2,by=c("Day","Product"))

这是所有内容:

  sales1 <- data.frame("Day" = c(01,02,03,04),
 "Product" = c("B","A","D","C"), "salesVol" = c(12,31,3,90))
  sales2 <- data.frame("Day" = c(01,01,01,01,02,02,02,02,03,03,03,03,04,04,04,04),
  "Product" = c("A","B","C","D","A","B","C","D","A","B","C","D","A","B","C","D")
    , "Price" = c(9,3,4,5,7,10,5,8,4,5,11,3,12,4,7,6))
sales1
sales2
merge(sales1,sales2,by=c("Day","Product"))

推荐阅读