简体   繁体   中英

copy specific value on a row based on conditions r

I have a dataset and I would like to copy the value of a specific cell on the first column.

Let's see if I can clarify it enough in an example.

High    Master Protein  Q8WHN2
Checked Confidence      Annotated Sequence
FALSE   High            [K].GWSVNIEYTDDPHPR.[N]
FALSE   High            [R].LTQGTFSFLPDLTDDQISK.[Q]
FALSE   High            [-].MRLTQGTFSFLPDLTDDQISK.[Q]
High    Master Protein  A0A345UA09
Checked Confidence      Annotated Sequence
FALSE   High            [R].DGEIILR.[Y]
FALSE   High            [R].DGEIILRYVSYSLLAGDPSVLEDR.[C]
FALSE   High            [-].MIDAFSR.[VIT]
FALSE   High            [R].YVSYSLLAGDPSVLEDR.[C]

and I would like it to become:

High    Master Protein  Q8WHN2
Checked Confidence      Annotated Sequence
Q8WHN2  High            [K].GWSVNIEYTDDPHPR.[N]
Q8WHN2  High            [R].LTQGTFSFLPDLTDDQISK.[Q]
Q8WHN2  High            [-].MRLTQGTFSFLPDLTDDQISK.[Q]
High    Master Protein  A0A345UA09
Checked Confidence      Annotated Sequence
A0A345UA09  High        [R].DGEIILR.[Y]
A0A345UA09  High        [R].DGEIILRYVSYSLLAGDPSVLEDR.[C]
A0A345UA09  High        [-].MIDAFSR.[VIT]
A0A345UA09  High        [R].YVSYSLLAGDPSVLEDR.[C]

So basically replace "FALSE" in col 1 with the value in row 1 col 3

Hopefully you have enough information.

Note that your column names will not be V1-V3, so you have to modify the code accordingly:

library(tidyverse)

d <- read.table(text = "High 'Master Protein' Q8WHN2
Checked Confidence 'Annotated Sequence'
FALSE   High  [K].GWSVNIEYTDDPHPR.[N]
FALSE   High  [R].LTQGTFSFLPDLTDDQISK.[Q]
FALSE   High            [-].MRLTQGTFSFLPDLTDDQISK.[Q]
High    'Master Protein'  A0A345UA09
Checked Confidence      'Annotated Sequence'
FALSE   High            [R].DGEIILR.[Y]
FALSE   High            [R].DGEIILRYVSYSLLAGDPSVLEDR.[C]
FALSE   High            [-].MIDAFSR.[VIT]
FALSE   High            [R].YVSYSLLAGDPSVLEDR.[C]")

d %>%
  mutate(my_fill = if_else(str_detect(V3, "\\[") | V3 == "Annotated Sequence",     as.character(NA), V3),
         V1 = if_else(!V1 %in% c("High", "Checked"), as.character(NA), V1)) %>%
  fill(my_fill,.direction = "down") %>%
  mutate(V1 = if_else(is.na(V1), my_fill, V1)) %>%
  select(-my_fill)

# V1             V2                               V3
# 1        High Master Protein                           Q8WHN2
# 2     Checked     Confidence               Annotated Sequence
# 3      Q8WHN2           High          [K].GWSVNIEYTDDPHPR.[N]
# 4      Q8WHN2           High      [R].LTQGTFSFLPDLTDDQISK.[Q]
# 5      Q8WHN2           High    [-].MRLTQGTFSFLPDLTDDQISK.[Q]
# 6        High Master Protein                       A0A345UA09
# 7     Checked     Confidence               Annotated Sequence
# 8  A0A345UA09           High                  [R].DGEIILR.[Y]
# 9  A0A345UA09           High [R].DGEIILRYVSYSLLAGDPSVLEDR.[C]
# 10 A0A345UA09           High                [-].MIDAFSR.[VIT]
# 11 A0A345UA09           High        [R].YVSYSLLAGDPSVLEDR.[C]

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