【发布时间】:2014-09-30 02:49:01
【问题描述】:
我正在尝试在 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))
任何帮助或指点将不胜感激!
【问题讨论】:
标签: r sum data.table multiple-conditions