我正在尝试生成观察的“情节”,将观察结果组合在一起struct eOfficeExtensions{
const CString WORD_EXTENSION;
const CString EXCEL_EXTENSION;
const CString WORDPAD_EXTENSION;
const INT EXTENSION2007;
};
const eOfficeExtensions extensions2003{_T(".doc"), _T(".xls"), _T(".rtf"), 0};
const eOfficeExtensions extensions2007{_T(".docx"), _T(".xlsx"), _T(".rtf"), 1};
const eOfficeExtensions* extensions = 0;
// ... Later ...
if (office2007Installed)
extensions = &extensions2007;
else
extensions = &extensions2003;
相隔14天。
有了dplyr,我设法计算了自上次观察以来的天数。但是,我无法弄清楚如何在没有</=
循环的情况下根据条件</= 14
获取新ID。
示例数据:
for
#obsvn is number of days since first observation in group
预期产出:
dat <- data.frame(id = c(rep("A",5), rep("B", 2)),
obsvn = c(1, 2, 29, 30, 45, 1, 15))
id obsvn
1 A 1
2 A 2
3 A 29
4 A 30
5 A 45
6 B 1
7 B 15
我尝试过使用滞后
id obsvn ith
1 A 1 1
2 A 2 1
3 A 29 2
4 A 30 2
5 A 45 3
6 B 1 1
7 B 15 2
这不是我想要的。我不明白为什么第4行中的dat <- dat %>%
group_by(id) %>%
mutate(ith = 1,
ith = ifelse(obsvn - lag(obsvn) <= 14, lag(ith), lag(ith)+1))
dat
Source: local data frame [7 x 3]
Groups: id
id obsvn ith
1 A 1 NA
2 A 2 1
3 A 29 2
4 A 30 1
5 A 45 2
6 B 1 NA
7 B 15 1
是1而不是2.
答案 0 :(得分:6)
因为它返回lag(ith)
,它始终为1(或者在开始时为NA)。
我会使用diff
和cumsum
:
dat %>% group_by(id) %>% mutate(ith = cumsum(c(1,diff(obsvn)>=14)))
Source: local data frame [7 x 3]
Groups: id
id obsvn ith
1 A 1 1
2 A 2 1
3 A 29 2
4 A 30 2
5 A 45 3
6 B 1 1
7 B 15 2