如何解决For循环R:将greppattern的结果馈送到R
我想使用某些(异步)日期(120+)的实验室值进行计算。但是,Lubridate不允许在同一列中同时使用ymd和ymd_hms。因此,我编写了一个工作grep,它可以不带时间地查找日期,并且在日期之后添加了00:00:00。这样,即01-12-1998变为01-12-1998 00:00(基于此查询:lubridate converting midnight timestamp returns NA: how to fill missing timestamp)
现在,我想制作一个Forloop,它可以自动识别可精简的列(将来可能会更改),并执行时间加法功能。
我找不到正确的文档说明来将下面的所有功能绑定在一起。很想知道在哪里可以找到更多信息!
Data frame: Testset
ID Lab_date1 Lab_date2 Lab_date3 Lab_date4
76 18/1/1982 26/01/1990 20/06/1990 15/11/1990
183 18/10/1982 24/04/1989 27/04/1989 02/04/1991
27 1/11/1983 18/10/1982 01:01 13/04/1983 31/10/1984
84 12-1-1983 12-1-1983 00:00 21-4-1983 15:10 22-3-1984 00:00
28 13-10-1989 13-1-1989 12:00 13-11-1991 14:11 19-11-1991 00:00
120 1-10-1982 14-7-1982 00:00 26-8-1986 00:00 26-8-1986 00:00
更改日期的功能现已设置为Lab_date1
Testset$Lab_date1[grep("[0-9]{1,2}.[0-9]{1,2}.[0-9]{4}$",Testset$Lab_date1)] <- paste(
Testset$Lab_date1[grep("[0-9]{1,Testset$Lab_date1)],"00:00:00")
此外,我编写了一个grep(模式),该grep返回实验室日期的列数,即2:4。可以使用上面的函数将此结果输入到forloop中吗?
dat_lab <- grep(pattern="Lab_date",x=colnames(Testset))
我已经尝试过了,但是没有用
for(i in names(dat_lab)){
y <- dat_lab[i]
y[grep("[0-9]{1,y)] <- paste(
y[grep("[0-9]{1,y)],"00:00:00")
}
解决方法
您可以使用parse_date_time
中的lubridate
来更改不同格式的日期时间。
library(dplyr)
Testset %>%
mutate(across(starts_with('Lab_date'),lubridate::parse_date_time,c('dmY','dmY HM'))) -> Testset
Testset
# ID Lab_date1 Lab_date2 Lab_date3 Lab_date4
#1 76 1982-01-18 1990-01-26 00:00:00 1990-06-20 00:00:00 1990-11-15
#2 183 1982-10-18 1989-04-24 00:00:00 1989-04-27 00:00:00 1991-04-02
#3 27 1983-11-01 1982-10-18 01:01:00 1983-04-13 00:00:00 1984-10-31
#4 84 1983-01-12 1983-01-12 00:00:00 1983-04-21 15:10:00 1984-03-22
#5 28 1989-10-13 1989-01-13 12:00:00 1991-11-13 14:11:00 1991-11-19
#6 120 1982-10-01 1982-07-14 00:00:00 1986-08-26 00:00:00 1986-08-26
数据
Testset <- structure(list(ID = c(76L,183L,27L,84L,28L,120L),Lab_date1 = c("18/1/1982","18/10/1982","1/11/1983","12-1-1983","13-10-1989","1-10-1982"
),Lab_date2 = c("26/01/1990","24/04/1989","18/10/1982 01:01","12-1-1983 00:00","13-1-1989 12:00","14-7-1982 00:00"),Lab_date3 = c("20/06/1990","27/04/1989","13/04/1983","21-4-1983 15:10","13-11-1991 14:11","26-8-1986 00:00"),Lab_date4 = c("15/11/1990","02/04/1991","31/10/1984","22-3-1984 00:00","19-11-1991 00:00","26-8-1986 00:00"
)),class = "data.frame",row.names = c(NA,-6L))
,
我们可以使用def load_market_data():
response = requests.get("https://api.blockchain.info/charts/market-price?timespan=2years&start=2019-07-01&format=csv").text
response = response.splitlines()
dfMRKT = pd.DataFrame(response)
dfMRKT.columns = ['WIP_transAMT']
dfMRKT['Date'] = pd.DatetimeIndex(dfMRKT['WIP_transAMT'].str.split(',').str[0]) + pd.DateOffset(1)
pd.to_datetime(dfMRKT['Date'])
dfMRKT['Mrkt Price USD'] = dfMRKT['WIP_transAMT'].str.split(',').str[1]
dfMRKT['Mrkt Price USD'] = pd.to_numeric(dfMRKT['Mrkt Price USD'],downcast="float")
dfMRKT = dfMRKT[['Date','Mrkt Price USD']]
today = date.today()
last_month = today - pd.DateOffset(months=1)
half_year = today - pd.DateOffset(month=6)
dfMRKT_halfyear = dfMRKT[(dfMRKT['Date'] >= half_year)]
dfMRKT_lastmonth = dfMRKT[(dfMRKT['Date'] >= last_month)]
lastmonth_min = dfMRKT_lastmonth.min()
lastmonth_min = lastmonth_min['Mrkt Price USD']
halfyear_min = dfMRKT_halfyear.min()
halfyear_min = halfyear_min['Mrkt Price USD']
today_value = dfMRKT_lastmonth.iloc[[-1]]
today_value = today_value['Mrkt Price USD']
today_value = float(today_value)
if today_value < (lastmonth_min+200):
print("send email")
else:
print("ignore")
anytime
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。