r - 在满足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。
然而,充其量我得到不正确的值,最坏的情况是(上面的代码)没有任何东西被粘贴。也没有错误信息。谢谢。
解决方案
这是你想要的吗?
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"))
推荐阅读
- r - 如何编织包含来自另一个 R Markdown 文件的数据的 R Markdown 文件?
- mysql - 如何按列值计数计算百分比
- javascript - Angularjs:需要验证 ng-repeat 中的下拉菜单
- asp.net-mvc - 在没有直接数据库连接的情况下通过 OWIN 在 ASP.NET MVC 站点中存储和检索任意用户数据
- java - 尝试从 Java EE 应用程序使用 SOAP WS 时出现 401 Unauthorized
- javascript - 结构化 JSON 项目的正则表达式匹配
- java - 未执行while循环的继续指令
- html - 如何在 html 内部重定向页面一次?
- rdf - 拆分 n-quads 文件中包含的所有不同图形
- mysql - 选择未订购或无订单且状态为成功的产品