在R中循环访问数据帧的最佳方法

时间:2019-06-14 09:11:10

标签: r dataframe

我正在尝试创建一个程序来遍历R数据表。我试图避免for循环,因为据我所知它们很慢。

#creation of the data table

col <- c(0, 1, 0, 1, 0, 1) 
Priority <- c(1,2,3,4,5,6) #1 highest, 6 lowest
IEC_category <- c("a","b","c","d","e","f")
eventlog_overlap.dt <- data.table(col,Priority, IEC_category)

#comparison and assignation of the priority

if (eventlog_overlap.dt$col == 1){
  if (eventlog_overlap.dt$Priority <= shift(eventlog_overlap.dt$Priority,1)){
    eventlog_overlap.dt$AlarmaPrior <-  eventlog_overlap.dt$IEC_category #write the actual category
  }
  else{
    eventlog_overlap.dt$AlarmaPrior <- shift(eventlog_overlap.dt$IEC_category,1) #write the previous category
  }
  } else{ eventlog_overlap.dt$AlarmaPrior <- NA
  }

1 个答案:

答案 0 :(得分:0)

请愿提供期望的结果。一次dplyr尝试:

library(dplyr)
library(hablar)
col <- c(0, 1, 0, 1, 0, 1) 
Priority <- c(1,2,3,4,5,6) #1 highest, 6 lowest
IEC_category <- c("a","b","c","d","e","f")
df <- data.frame(col,Priority, IEC_category)

df %>% 
  mutate(AlarmaPrior = if_else_(col == 1,
                                if_else_(Priority <= lag(Priority), 
                                         IEC_category, 
                                         lag(IEC_category)), NA))

给您

  col Priority IEC_category AlarmaPrior
1   0        1            a        <NA>
2   1        2            b           a
3   0        3            c        <NA>
4   1        4            d           c
5   0        5            e        <NA>
6   1        6            f           e