在R中的For循环中嵌套if循环以比较条件

时间:2018-12-01 11:41:59

标签: r if-statement conditional-statements

我想比较两个条件并分配一个分数;我有两个向量,一个A带有一些值,B是时间戳。我要做的就是说A中的值大于一个阈值,并且时间戳与其前一个时间戳的差大于1,我应该给C分配一个分数。我在执行以下代码时遇到麻烦。

for(i in 2:length(test$B)) {
  if(test$A>15 & (test$B[i]-test$B[i-1])<=4) {
    test$C<-3 
  } else if(test$A<15 & (test$B[i]-test$B[i-1]==1)) {
    test$C<-2 
  } else {
    test$C<-1
  } 
}

1 个答案:

答案 0 :(得分:0)

样本数据

set.seed(123)
df <- data.frame( A = sample( 10:20, 100, replace = TRUE ),
                  B = sample( 1:11, 100, replace = TRUE ),
                  stringsAsFactors = FALSE )

代码-tidyverse / dplyr

library( dplyr )                  

df %>% mutate( C = case_when(
  A > 15 & B - lag( B ) <= 4 ~ 3,
  A < 15 & B - lag( B ) == 1 ~ 2,
  TRUE ~ 1 ) )

#      A  B C
# 1   12  2 1
# 2   13  8 1
# 3   12 11 1
# 4   11  3 1
# 5   19  6 3
# 6   17  9 3
# 7   20  7 3
# 8   16  9 3
# 9   14  4 1
# 10  20  5 3
# 11  20  3 3
# 12  14  4 2
#...