用dplyr替换特定行的值

时间:2018-05-14 14:15:25

标签: r dplyr mutate

我有数据框

df <- data.frame(Var1=c('T','C','C','A','G','G'), Var2 = c('-','-','+','-  ','+','-'), Var3 = c('A','T','T','TATGTGTGTG','AC','AGAGAAGAGAAGAGA')))

所需的输出应为

Var1                Var2  Var3
TA                  -     A
CT                  -     T
CT                  +     T
ATATGTGTGTG         -     TATGTGTGTG
G                   +     GAC
GAGAGAAGAGAAGAGA    -     AGAGAAGAGAAGAGA

使用此伪代码

如果Var2 ==' - '那么Var1 == paste(Var1,Var2,sep ='')

如果Var2 =='+'则Var3 == paste(Var1,Var2,sep ='')

我试过了

library(dplyr)
df %>% mutate(df, Var1 = ifelse(Var2 == "-", paste(Var1,Var3,sep=''), Var1))

Var1            Var2   Var3
TA              -      A
CT              -      T
2               +      T
ATATGTGTGTG     -      TATGTGTGTG
3               +      AC
GAGAGAAGAGAAGAGA -     AGAGAAGAGAAGAGA

以及

df %>% mutate(Var1 = ifelse(lead(Var2 == '-', default = F), paste(Var1,Var3,sep=''), Var1))

Var1 Var2         Var3
TA   -               A
2    -               T
CT   +               T
1    -      TATGTGTGTG
GAC  +              AC
3    - AGAGAAGAGAAGAGA

我无法弄明白。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果Var1Var2Var3是字符串,那么您可以使用:

df %>% mutate(Var1=ifelse(Var2=='-', paste0(Var1,Var3), Var1), Var3=ifelse(Var2=='+', paste0(Var1,Var3), Var3))

如果Var1Var2Var3是因素,那么您可以使用:

df %>% mutate(Var1=ifelse(Var2=='-', paste0(Var1,Var3), as.character(Var1)), Var3=ifelse(Var2=='+', paste0(Var1,Var3), as.character(Var3)))