R / Python,如何在不使用简单的for循环的情况下基于2个条件填充数据?

学习者132

我正在做一些记帐,但是然后想知道是否有更好的方法来替换长列表项的循环(CPU密集型)。

假设我们有一个这样的交易记录:

交易数据

Qty  Date_purchase  Price_purchase  Date_sale  Price_sale  
5    01/11/2020     ???             02/11/2020 ???         
10   03/11/2020     ???             05/11/2020 ???         
5    03/11/2020     ???             06/11/2020 ???         
....

我要做的是填充??? 价格根据此列表中的日期。

价格表

Date        Price
01/11/2020  10
02/11/2020  15
03/11/2020  17
.... 

我已经尝试过合并,联接,但是在用R中的tidyverse编写代码时遇到了麻烦(如果代码工作更快,可以切换到Python)。

transaction_data


%>% transaction_data$Price_purchase  <- left_join(price_list, by = c('Date_purchase', 'Date')


%>% transaction_data$Price_sale  <- left_join(price_list, by = c('Date_sale', 'Date') (not working)

编辑:所有的解决方案都是平等的,我希望我可以选择所有作为正确答案

阿克伦

如果需要for循环,则循环遍历“ transaction_date”中“ Date”列的向量,left_join使用“ price_list”,mutate将“ Price_purchase”作为“ price_list”中的“ Price”列,然后删除该列

library(dplyr)
nm1 <- c("Date_purchase", "Date_sale")
for(nm in nm1) {
    transaction_date <- left_join(transaction_date, price_list, 
           by = setNames('Date', nm)) %>%
            mutate(Price_purchase = Price) %>%
            select(-Price)
 }     

如果日期联接在一个范围内,则在将“日期”列转换为Date后,我们可以使用非等距联接

library(data.table)
nm1 <- c('Date_purchase', 'Date_sale')
setDT(transaction_date)[, nm1 := 
       lapply(.SD, as.IDate, format = "%d/%m/%Y"), .SDcols = nm1] 
setDT(price_list)[, Date := as.IDate(Date, "%d/%m/%Y")]
transaction_date[price_list, Price_purchase := 
    Price, on = .(Date_purchase >= Date, Date_sale <= Date)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在R中不使用嵌套循环的情况下引用2个不同的数据帧

如何在不使用 R 进行循环索引的情况下用另一个数据框的内容填充一个大数据框?

我如何在R中不使用for循环的情况下获得相同的结果

如何在R中不使用分隔符的情况下拆分列数据

如何在不使用循环的情况下在 R 中创建一个大列表

如何在不使用循环的情况下计算R中的中间区间百分等级?

在不使用 r 中的列表的情况下循环遍历数据帧

在不使用 for 循环的情况下匹配 R 数据帧之间的值

在不使用 NROW() 的情况下,在 for 循环中向 R 数据帧添加新行

如何在不使用 R 中的 GGally 的情况下绘制矩阵列数据的所有组合?

如何在不使用cat(3,R,G,B)函数的情况下串联3个RGB通道

如何在不使用python或R打开浏览器的情况下拍摄youtube页面的屏幕截图?

如何在R中没有for循环的情况下创建条件整数序列的组合?

如何在r中不使用cumprod的情况下累加向量?

如何在不使用 for 循环的情况下在 R 中实现动态计数?

在不使用循环的情况下汇总R中的数据时,是否可以从其他组访问数据?

如何在r中不使用NA的情况下选择第一个和最后一个测试

Postgres&Rust R2D2:如何在不使用转义双引号的情况下以文本/字符串的形式获取array_to_json?

在不使用 for 循环的情况下使用 R 对矩阵的 1:n 元素求和

使用FOR循环从R中填充数据(代码审查)

使用 if else 循环在 R 中填充数据框

打开窗口时如何在不使用参数的情况下指定R中绘图的宽度和高度

如何在不使用R读取整个文件的情况下确定远程下载的文件大小

R Shiny-如何在不使用全局变量的情况下动态添加到表中?

如何在不使用Spark软件包的情况下读取R中的实木复合地板文件?

R:如何在不使用先前子集的情况下对df的一部分进行计算?

我可以在不使用R的情况下将.rda文件转换为python中的pandas数据框吗?

R:对于具有不同条件的循环,使用相同数据填充2个向量

如何在不使用 python 循环的情况下创建引用数据框和字典的当前列的条件列?