gpt4 book ai didi

r - 使用 ddply 根据日期值查找变量值

转载 作者:行者123 更新时间:2023-12-04 05:46:32 25 4
gpt4 key购买 nike

我有一个如下所示的 data.frame:

ID     Date.A        Date.B        Variable
A 01/01/2012 03/24/2012 Apples
A 02/01/2012 03/24/2012 Oranges
B 01/01/2012 02/04/2012 Bananas
C 01/01/2012 04/22/2012 Apples
A 03/01/2012 03/24/2012 Grapes
B 02/01/2012 02/04/2012 Oranges
D 01/01/2012 03/15/2012 Apples

对于每个 ID,我需要找到对应于 Date.B 前一个月的第一天的变量。因此,对于 ID A,我需要提取“Oranges”,因为 03/24/2012 - 1 个月 = 02/24/2012,而该月的第一天是 02/01/2012。

我对使用 lubridate 的日期计算没有问题:format.Date(df$Date.B -months(1), format="%Y-%m-01")。在不编写讨厌的 for 循环的情况下,我无法将该逻辑合并到 ddply 或以编程方式合并。不是要求算法帮助或有人为我解决它,而是希望看到一个使用与此类似的自定义日期逻辑的 ddply 示例。

提前致谢。

最佳答案

这不是与 lubridateplyr我什至不确定这是否能解决您的问题。我选择使用 mondate tcash21 声明的原因包:

10/31/2012 - months(1)

而且我不再使用 plyr 了,所以我对 plyr 的看法并不多。如果您的数据称为 dat:
#Read your data in
dat <- read.table(text="ID Date.A Date.B Variable
A 01/01/2012 03/24/2012 Apples
A 02/01/2012 03/24/2012 Oranges
B 01/01/2012 02/04/2012 Bananas
C 01/01/2012 04/22/2012 Apples
A 03/01/2012 03/24/2012 Grapes
B 02/01/2012 02/04/2012 Oranges
D 01/01/2012 03/15/2012 Apples", header=TRUE)

#This may be unnecessary but when I read your data in the dates were characters
lapply(2:3, function(i) {dat[, i] <<- as.Date(dat[, i], "%m/%d/%Y")})



library(mondate)
prevmon <- as.character(mondate(dat$Date.B) - 1) #get minus 1 month
z <- strsplit(prevmon, "-") #make it that first of that month
dat$Date.C <- as.Date(sapply(z, function(x) paste(x[1], x[2], "01", sep="-")))

key <- split(dat, dat$ID) #make list of data frames by ID

#fruit finding function
fruiter <- function(x) x[match(x[, "Date.C"][1], x[, "Date.A"]), "Variable"]
sapply(key, fruiter)

其中产生:
      A       B       C       D 
Oranges Bananas <NA> <NA>

显然,由于我附加到您的问题的评论中的原因,有几个月的不适用。

关于r - 使用 ddply 根据日期值查找变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com