我正在尝试在一个data.frame
或data.table
两个条件下创建一个列。我看到的帖子和我在下面尝试修改的帖子的不同之处在于,我没有条件的“价值”,但条件取决于data.frame
.
假设这是我的数据框:
mydf <- data.frame (Year = c(2000, 2001, 2002, 2004, 2005,
2007, 2000, 2001, 2002, 2003,
2003, 2004, 2005, 2006, 2006, 2007),
Name = c("Tom", "Tom", "Tom", "Fred", "Gill",
"Fred", "Gill", "Gill", "Tom", "Tom",
"Fred", "Fred", "Gill", "Fred", "Gill", "Gill"))
我想知道这 3 名受试者在过去 5 年内经历了多少次事件。但是,如果事件日期可以追溯到 5 年以上,我不想包括它。我想我可以做一个指标变量的总和(如果受试者在一年中经历了事件,则设置为 1),同时指定一些类似的东西Year < Year & Year >= Year-5
。所以基本上总结了小于焦点年和大于或等于焦点年前5年的经验。
我已经创建了一个求和指标和一个焦点年的变量 - 5
mydf$Ind <- 1
mydf$Yearm5 <- mydf$Year-5
然后我转换为速度数据表(原始df有+60k obs)
library(data.table)
mydf <- data.table(mydf)
现在的问题是我无法让这两个条件起作用。我所看到的帖子似乎都知道一个特定的值来进行子集化(例如R data.table 在多个条件下进行子集化。),但在我的情况下,值会从观察变为观察(不确定这是否意味着我需要做一些循环?)。
我想我需要一些类似的东西:
mydf[, c("Exp"):= sum(Ind), by = c("Name")][Year < Year & Year >= Yearm5]
给出:
Empty data.table (0 rows) of 5 cols: Year,Name,Ind,Yearm5,Exp
仅使用一个条件
mydf1 <- mydf[, c("Exp"):= sum(Ind), by = c("Name")][Year >= Yearm5]
给出了总体经验,所以我假设Year < Year
情况有问题。
我不太确定是什么。我还尝试修改以下建议: 如何在 R 中的一个向量中累积添加值 而再次不走运,我指定条件的方式似乎有问题。
library(dplyr)
mytest1 <- mydf %>%
group_by(Name, Year) %>%
filter(Year < Year & Year >= Yearm5) %>%
mutate(Exp = sum(Ind))
结果应如下所示:
myresult <- data.frame (Year = c(2003, 2004, 2004, 2006,
2007, 2000, 2001, 2005,
2005, 2006, 2007, 2000,
2001, 2002, 2002, 2003),
Name = c("Fred", "Fred", "Fred", "Fred",
"Fred", "Gill", "Gill", "Gill",
"Gill", "Gill", "Gill", "Tom",
"Tom", "Tom", "Tom", "Tom"),
Ind = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
Exp = c(0, 1, 1, 3, 4, 0, 1, 1, 1, 2, 3, 0, 1, 2, 2, 4),
Yearm5 = c(1998, 1999, 1999, 2001, 2002,
1995, 1996, 2000, 2000, 2001,
2002, 1995, 1996, 1996, 1997, 1998))
任何帮助或指示将不胜感激!