如果之前有人问过,请道歉。我无法找到任何令人满意的答案,虽然听起来应该是一个相当简单的操作。
我有我的数据
transition_frame name state_number lifetime
<int> <chr> <dbl> <dbl>
1 38 //Traces_exp1_tif_pair10 1 NA
2 44 //Traces_exp1_tif_pair10 2 6
3 352 //Traces_exp1_tif_pair10 3 308
4 362 //Traces_exp1_tif_pair10 4 10
5 379 //Traces_exp1_tif_pair10 5 17
6 388 //Traces_exp1_tif_pair10 6 9
计算过渡帧之间的行方差异很容易,但是因为没有&#34;过渡&#34;在状态0和1之间,它打破了流程。
如何在不触及任何其他数据的情况下,仅将第一行设为transition_frame - 1
(提示,它是37)?
试想,
group_by(name) %>%
filter(state_number == 1) %>%
mutate(lifetime = transition_frame - 1) %>%
unfilter() # To retrieve dropped data
这将导致整个集合,第一行计算,而仅第一行。
transition_frame name state_number lifetime
<int> <chr> <dbl> <dbl>
1 38 //Traces_exp1_tif_pair10 1 37
2 44 //Traces_exp1_tif_pair10 2 6
3 352 //Traces_exp1_tif_pair10 3 308
4 362 //Traces_exp1_tif_pair10 4 10
5 379 //Traces_exp1_tif_pair10 5 17
6 388 //Traces_exp1_tif_pair10 6 9
答案 0 :(得分:1)
希望类似于以下代码的方法可能会对您有所帮助!
df <- data.frame(transition_frame=c(38,44,352),
name=c('//Traces_exp1_tif_pair10','//Traces_exp1_tif_pair10','//Traces_exp1_tif_pair10'),
state_number=c(1,2,3),
lifetime=c(NA,6,308))
df[df$state_number==1 & is.na(df$lifetime),"lifetime"] <-
df[df$state_number==1 & is.na(df$lifetime),"transition_frame"] - 1
df
答案 1 :(得分:1)
以下是否适用于您?
df <- data.frame(transition_frame = c(38, 44, 352, 362, 379, 388),
name = rep("//Traces_exp1_tif_pair10", 6),
state_number = seq(1, 6))
df %>% mutate(lifetime = diff(c(1, transition_frame)))
transition_frame name state_number lifetime
1 38 //Traces_exp1_tif_pair10 1 37
2 44 //Traces_exp1_tif_pair10 2 6
3 352 //Traces_exp1_tif_pair10 3 308
4 362 //Traces_exp1_tif_pair10 4 10
5 379 //Traces_exp1_tif_pair10 5 17
6 388 //Traces_exp1_tif_pair10 6 9
如果希望状态0中的转换帧采用不同的值,则将diff()
中的1替换为其他值。