简体   繁体   中英

Replace values for specific rows with dplyr

I have the dataframe

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

The desired output should be

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

by using this pseudo-code

if Var2 == '-' then Var1 == paste(Var1,Var2, sep='')

if Var2 == '+' then Var3 == paste(Var1,Var2, sep='')

I have tried

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

and also

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

and I can't figure out. Any suggestion?

If Var1 , Var2 and Var3 are strings, then you can use:

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

If Var1 , Var2 and Var3 are factors, then you can use:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM