我正在尝试在具有两个条件的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 subsetting on multiple conditions.),但是在我的情况下,该值在观察之间变化(不确定是否需要做一些循环?)。 >
我认为我需要一些类似的东西:
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
条件有问题。
虽然我不太确定。我也尝试修改以下建议:how to cumulatively add values in one vector in 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))
任何帮助或指针,将不胜感激!
我正在尝试在具有两个条件的data.frame或data.table中创建一列。我看到的帖子和下面尝试修改的帖子的不同之处在于,我对...
这里是使用rollapply
和data.table
的方法
这里是使用data.table
的一种更多roll
方法。
使用data.table
,我认为您正在寻找的语法应该是这样的: