在 R 中使用 dplyr 替换时间点
Replace time points using dplyr in R
我的数据框是这样的
value <- c(0,0.1,0.2,0.4,0,0.05,0.05,0.5,0.20,0.40,0.50,0.60)
time <- c(1,1,1,1,2,2,2,2,3,3,3,3)
ID <- c(1,2,3,4,1,2,3,4,1,2,3,4)
test <- data.frame(value, time, ID)
test
value time ID
1 0.00 1 1
2 0.10 1 2
3 0.20 1 3
4 0.40 1 4
5 0.00 2 1
6 0.05 2 2
7 0.05 2 3
8 0.50 2 4
9 0.20 3 1
10 0.40 3 2
11 0.50 3 3
12 0.60 3 4
在这个例子中,我的时间序列从“1”开始,到“3”结束。我想将列 'time' 和我的时间序列替换为从“0”开始到“2”结束。我希望我的时间序列看起来像这样
value time ID
1 0.00 0 1
2 0.10 0 2
3 0.20 0 3
4 0.40 0 4
5 0.00 1 1
6 0.05 1 2
7 0.05 1 3
8 0.50 1 4
9 0.20 2 1
10 0.40 2 2
11 0.50 2 3
12 0.60 2 4
test %>%
mutate(time = time - min(time))
# value time ID
# 1 0.00 0 1
# 2 0.10 0 2
# 3 0.20 0 3
# 4 0.40 0 4
# 5 0.00 1 1
# 6 0.05 1 2
# 7 0.05 1 3
# 8 0.50 1 4
# 9 0.20 2 1
# 10 0.40 2 2
# 11 0.50 2 3
# 12 0.60 2 4
使用time-min(time)
将始终确保第一次是0
,即使不是从1
开始。
另一种选择是使用 match
:
library(dplyr)
test %>% mutate(time = match(time, unique(time)) - 1)
# value time ID
#1 0.00 0 1
#2 0.10 0 2
#3 0.20 0 3
#4 0.40 0 4
#5 0.00 1 1
#6 0.05 1 2
#7 0.05 1 3
#8 0.50 1 4
#9 0.20 2 1
#10 0.40 2 2
#11 0.50 2 3
#12 0.60 2 4
当您有一个不连续的时间序列(如 1、3、4)时,这会很有帮助。使用 match
它将把它排列在 0、1、2 中。
我的数据框是这样的
value <- c(0,0.1,0.2,0.4,0,0.05,0.05,0.5,0.20,0.40,0.50,0.60)
time <- c(1,1,1,1,2,2,2,2,3,3,3,3)
ID <- c(1,2,3,4,1,2,3,4,1,2,3,4)
test <- data.frame(value, time, ID)
test
value time ID
1 0.00 1 1
2 0.10 1 2
3 0.20 1 3
4 0.40 1 4
5 0.00 2 1
6 0.05 2 2
7 0.05 2 3
8 0.50 2 4
9 0.20 3 1
10 0.40 3 2
11 0.50 3 3
12 0.60 3 4
在这个例子中,我的时间序列从“1”开始,到“3”结束。我想将列 'time' 和我的时间序列替换为从“0”开始到“2”结束。我希望我的时间序列看起来像这样
value time ID
1 0.00 0 1
2 0.10 0 2
3 0.20 0 3
4 0.40 0 4
5 0.00 1 1
6 0.05 1 2
7 0.05 1 3
8 0.50 1 4
9 0.20 2 1
10 0.40 2 2
11 0.50 2 3
12 0.60 2 4
test %>%
mutate(time = time - min(time))
# value time ID
# 1 0.00 0 1
# 2 0.10 0 2
# 3 0.20 0 3
# 4 0.40 0 4
# 5 0.00 1 1
# 6 0.05 1 2
# 7 0.05 1 3
# 8 0.50 1 4
# 9 0.20 2 1
# 10 0.40 2 2
# 11 0.50 2 3
# 12 0.60 2 4
使用time-min(time)
将始终确保第一次是0
,即使不是从1
开始。
另一种选择是使用 match
:
library(dplyr)
test %>% mutate(time = match(time, unique(time)) - 1)
# value time ID
#1 0.00 0 1
#2 0.10 0 2
#3 0.20 0 3
#4 0.40 0 4
#5 0.00 1 1
#6 0.05 1 2
#7 0.05 1 3
#8 0.50 1 4
#9 0.20 2 1
#10 0.40 2 2
#11 0.50 2 3
#12 0.60 2 4
当您有一个不连续的时间序列(如 1、3、4)时,这会很有帮助。使用 match
它将把它排列在 0、1、2 中。