Добавить строки к тексту в R - PullRequest
1 голос
/ 17 июня 2019

Я хочу классифицировать некоторые символы, которые удовлетворяют условию в одном столбце, и объединить другие символы в строке в другом столбце.

Классификация работает.Когда в столбце «col» есть 1, программа должна сравнить входные данные в «Category», фактическое значение с предыдущим.Если номер приоритета меньше, сохраните значение в «AlarmPrior», а другое значение в «Other Alarms».Я хочу объединить все значения с меньшим приоритетом в строке «Другие аварийные сигналы».

    #test the function 

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

    #loading the libraries
    library(magrittr) 
    library(dplyr)

    #comparison and value assignation in function of the priority

    eventlog_overlap.dt$OtherAlarms <- "" 
    eventlog_overlap.dt <- 
      eventlog_overlap.dt %>% 
        mutate(AlarmPrior = ifelse(col == 1,
                                      ifelse(Priority <= lag(Priority), 
                                               Category, 
                                               lag(Category)), NA),
               OtherAlarms = ifelse(col == 1,
                                    ifelse(Priority <= lag(Priority),
                                               "1",
                                               paste0(sprintf(Category,     lag(OtherAlarms)), collapse = ", ")),NA))

Например:

Этот вход,

col <- c(0, 1, 0, 0, 1, 1)
Priority <- c(1,2,3,4,5,6)
Category <- c("a","b","c","d","e","f")

Следуетreturn:

             col      Priority      Category     OtherAlarms     AlarmPrior
    1         0          1             a             NA             NA
    2         1          2             b             b               a             
    3         0          3             c             b,c             NA
    4         0          4             d             b,c             NA
    5         1          5             e             b,c,e           d
    6         1          6             f             b,c,e,f         e

Мой фактический результат такой:


             col      Priority      Category     OtherAlarms     AlarmPrior
    1         0          1             a             NA             NA
    2         1          2             b             a,b,c,d,e,f     a             
    3         0          3             c             NA              NA
    4         0          4             d             NA              NA
    5         1          5             e             a,b,c,d,e,f     d
    6         1          6             f             a,b,c,d,e,f     e

1 Ответ

0 голосов
/ 17 июня 2019

Я использовал оператор for для решения проблемы

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

#loading the libraries
library(magrittr) 
library(dplyr)

#comparison and value assignation in function of the priority

eventlog_overlap.dt$OtherAlarms <- "" 
eventlog_overlap.dt <- 
  eventlog_overlap.dt %>%
  mutate(AlarmPrior = ifelse(col == 1,
                             ifelse(Priority <= lag(Priority), 
                                    Category, 
                                    lag(Category)), NA))



eventlog_overlap.dt$leadCate= lead(eventlog_overlap.dt$AlarmPrior)

tmpdata = character()
eventlog_overlap.dt$tmp= NA
for(i in 1:nrow(eventlog_overlap.dt)){

  tmp =  eventlog_overlap.dt[i,3]
  leadtmp = eventlog_overlap.dt[i,6]

  if(!is.na(leadtmp == tmp) & !as.logical(eventlog_overlap.dt$col[i])){

    tmp = tmp[!grepl(tmp,leadtmp)]
    tmp = ifelse(NROW(tmp)==0,NA,tmp)
    tmpdata = tmpdata
  } else{
    tmpdata = c(tmpdata,tmp)
  }

  eventlog_overlap.dt[i,7] = paste(tmpdata,collapse = ',')
 }

И результат показан ниже


> eventlog_overlap.dt

  col Priority Category OtherAlarms AlarmPrior leadCate     tmp
1
1   0        1        a                   <NA>        a        
2
2   1        2        b                      a     <NA>       b
3
3   0        3        c                   <NA>     <NA>     b,c
4
4   0        4        d                   <NA>        d     b,c
5
5   1        5        e                      d        e   b,c,e
6
6   1        6        f                      e     <NA> b,c,e,f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...