как заменить значения строк условным оператором в R - PullRequest
0 голосов
/ 03 апреля 2019

У меня 3 колонки Seq, Period и Treatment. Последовательность имеет значения ABB, BBA, BAB, то есть комбинации 1А и 2В. Период имеет 3 значения, то есть 1,2 и 3 и лечение будет иметь значение на основе периода и последовательности например. если Sequence - ABB, а Period - 1, тогда Лечение будет A если Sequence - ABB, а Period - 2, тогда Лечение будет B аналогично, если Sequence - ABB, а Period - 3, тогда Лечение будет B. Ниже приведен снимок данных

 Sequence Period Treatment   
    BBA      1         B  
    BBA      2         B  
    BBA      3         A 
    ABB      1         A 
    ABB      2         B 
    ABB      3         B

Я хочу заменить значение обработки B последовательности BBA и периода 1 на B1, а последовательности BBA и периода 2 на B2 аналогично остальным данным.

Я попробовал следующий код

updatedata<-if((data$Sequence=='ABB' && data$Period==2) || (data$Sequence=='BAB' && data$Period==1) || (data$Sequence=='BBA' && data$Period==1)){
  data$Treatment<-'B1'
}else if((data$Sequence=='ABB' && data$Period==3) || (data$Sequence=='BAB' && data$Period==3) || (data$Sequence=='BBA' && data$Period==2)){
data$Treatment<-'B2'
}else((data$Sequence=='ABB' && data$Period==1) || (data$Sequence=='BAB' && data$Period==2) || (data$Sequence=='BBA' && data$Period==3)){
data$Treatment<-'A'}

Ожидаю следующих результатов

Sequence Period Treatment   
    BBA      1         B1  
    BBA      2         B2 
    BBA      3         A 
    ABB      1         A 
    ABB      2         B1
    ABB      3         B2

Но я получаю следующую ошибку:

Ошибка: неожиданное '{' in: "data $ Treatment <- 'B2' } else ((data $ Sequence == 'ABB' && data $ Period == 1) || (data $ Sequence == 'BAB' && data $ Period == 2) || (данные $ Sequence == 'BBA' && Данные $ Период == 3)) { "</p>

1 Ответ

1 голос
/ 03 апреля 2019

Использование dplyr

z%>%mutate(Treatment=if_else(Treatment=="B",paste0("B",Period),Treatment))

1      BBA      1        B1
2      BBA      2        B2
3      BBA      3         A
4      ABB      1         A
5      ABB      2        B2
6      ABB      3        B3

Редактировать

Вторая версия:

cond1 = z$Sequence=="BBA" & z$Treatment=="B"
cond2 = z$Sequence=="ABB" & z$Treatment=="B"
cond3 = z$Sequence=="BAB" & z$Treatment=="B"

z$Treatment[cond1]=paste0(z$Treatment[cond1],z$Period[cond1])
z$Treatment[cond2]=paste0(z$Treatment[cond2],z$Period[cond2]-1)
z$Treatment[cond3]=paste0(z$Treatment[cond3],
                          ifelse(z$Period[cond3]>2,2,1))
> z
   Sequence Period Treatment
2       BBA      1        B1
3       BBA      2        B2
4       BBA      3         A
5       ABB      1         A
6       ABB      2        B1
7       ABB      3        B2
8       BAB      1        B1
9       BAB      2         A
10      BAB      3        B2

данные:

structure(list(Sequence = c("BBA", "BBA", "BBA", "ABB", "ABB", 
"ABB", "BAB", "BAB", "BAB"), Period = c(1, 2, 3, 1, 2, 3, 1, 
2, 3), Treatment = c("B1", "B2", "A", "A", "B1", "B2", "B1", 
"A", "B2")), row.names = 2:10, class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...