【发布时间】:2020-10-15 09:35:47
【问题描述】:
我有一个看起来像这样的数据框(实际数据要大得多,也更复杂):
df.test = data.frame(
sample = c("a","a","a","a","a","a","b","b"),
day = c(0,1,2,0,1,3,0,2),
value = rnorm(8)
)
sample day value
1 a 0 -1.11182146
2 a 1 0.65679637
3 a 2 0.03652325
4 a 0 -0.95351736
5 a 1 0.16094840
6 a 3 0.06829702
7 b 0 0.33705141
8 b 2 0.24579603
数据框由实验组织,但缺少实验 ID。相同的样本可以用于不同的实验,但我知道在单个实验中,天数从 0 开始,并且单调递增。
如何添加可以是数字 {1, 2, ...} 的实验 ID?
所以结果数据框将是
sample day value exp
1 a 0 -1.11182146 1
2 a 1 0.65679637 1
3 a 2 0.03652325 1
4 a 0 -0.95351736 2
5 a 1 0.16094840 2
6 a 3 0.06829702 2
7 b 0 0.33705141 3
8 b 2 0.24579603 3
如果有任何帮助,我将不胜感激,尤其是使用 tidy/dplyr 解决方案。
【问题讨论】:
-
我知道
cumsum,但是在这里如何应用呢?还在想。 -
像
df.test %>% mutate(exp= 1 + cumsum(day - lag(day, default = 0) < 0))这样的东西对你有用吗? -
cumsum(df.test$day == 0)我假设 - 我怀疑某处有重复,但我正在吃午饭。 -
@Z.Lin:看起来很棒,正是我需要的。谢谢!请提交作为答案。
标签: r dataframe dplyr grouping