【发布时间】:2019-08-13 21:54:47
【问题描述】:
我有一个数据集,随着时间的推移对多个人进行重复测量。它看起来像这样:
ID Time Event
1 Jan 1 2012, 4pm Abx
1 Jan 2 2012, 2pm Test
1 Jan 26 2012 3 pm Test
1 Jan 29 2012 10 pm Abx
1 Jan 30 2012, 3 pm Test
1 Jan 5 2012 3 pm Test
2 Jan 1 2012, 4pm Abx
2 Jan 2 2012, 2pm Test
2 Jan 26 2012 3 pm Test
数据集当前基于事件。它稍后将被过滤为仅测试。我需要做的是在某个测试时间范围内发生某些事件(在本例中为 Abx)时创建一个新变量,该变量为 1。因此,如果事件“Abx”发生在测试事件的 48 小时内,则新变量应该等于 1。否则,它应该等于 0。 我希望制作这样的东西:
ID Time Event New_variable
1 Jan 1 2012, 4pm Abx 1
1 Jan 2 2012, 2pm Test 1
1 Jan 26 2012 3 pm Test 0
1 Jan 29 2012 10 pm Abx 1
1 Jan 30 2012, 3 pm Test 1
1 Jan 5 2012 3 pm Test 0
2 Jan 1 2012, 4pm Abx 1
2 Jan 2 2012, 2pm Test 1
2 Jan 26 2012 3 pm Test 0
我知道我可以通过结合使用 Dplyr mutate 函数和 ifelse 语句来解决这个问题,如果我只想在抗生素事件发生时创建一个读取为“1”的变量,我可以这样做:
test %>%
mutate(New_variable = ifelse(Event == 'Abx', 1, 0)) -> test2
但我不知道如何考虑时间因素,以便在 Abx 事件的 48 小时内测试事件 = 1。我也不确定如何确保该条件仅适用于同一 ID。我该怎么做?
感谢任何帮助!
更新:非常感谢您的建议! 我将在数据上尝试这些方法,但我认为它们会起作用。如果他们不这样做,我很快就会回来。 成功!我还修改了建议的辅助函数以包含其他选项(用于不止一种类型的 Abx):
abxRows <- type == "Abx" | type == "Abx2"
【问题讨论】:
标签: r if-statement dplyr