워라밸 중독자

[R] 데이터프레임에서 조건에 맞는 행의 값만 변경하기 본문

코딩, 딱 지금이 시작할때! (코딱지)

[R] 데이터프레임에서 조건에 맞는 행의 값만 변경하기

Ufungi 2024. 5. 24. 14:37

Phylogenetic tree data인데 label에 TMF나 ASV가 있으면 Source 열에 "query" 를 집어넣고 싶음

> dat
# A tibble: 937 × 13
   parent  node branch.length label                           isTip     x     y branch angle Taxon     Subtree Cluster  Source
    <int> <int>         <dbl> <chr>                           <lgl> <dbl> <dbl>  <dbl> <dbl> <chr>       <int> <chr>    <lgl> 
 1    451     1    0          NR_119548_1                     TRUE  0         1  0       0.8 NA             NA NA       NA    
 2    452     2    0          SH1029311_09FU_AY997073_refs    TRUE  0         2  0       1.6 NA             NA NA       NA    
 3    453     3    0.342      SH1034525_09FU_MG764644_reps    TRUE  0.787     3  0.616   2.4 Monotypic     114 114.Mon… NA    
 4    456     4    0.490      SH1186382_09FU_UDB04688109_reps TRUE  1.37      9  1.12    7.2 Monotypic     114 114.Mon… NA    
 5    459     5    1.76       ASV_2902                        TRUE  3.88     14  3.00   11.2 Monotypic     114 114.Mon… NA    
 6    468     6    0.185      ASV_19012                       TRUE  3.82    402  3.73  322.  Monotypic     114 114.Mon… NA    
 7    472     7    0.257      ASV_1653                        TRUE  4.03    419  3.90  335.  Monotypic     114 114.Mon… NA    
 8    474     8    0.304      ASV_480                         TRUE  4.09    425  3.93  340   Monotypic     114 114.Mon… NA    
 9    476     9    0.0812     ASV_16839                       TRUE  3.99    428  3.95  342.  Monotypic     114 114.Mon… NA    
10    482    10    0.00000244 ASV_305                         TRUE  4.08    445  4.08  356   NA             NA NA       NA    
# ℹ 927 more rows
# ℹ Use `print(n = ...)` to see more rows


1. mutate, ifelse() 와 조건문 활용

dat <- dat %>%  mutate(Source = ifelse(grepl("ASV|TMF", label), "query", Source))

 

2. [ ] indexing 과 조건문 활용

dat[grepl("ASV|TMF",dat$label),]$Source <- "query"

 

둘 다 같은 결과 낸다.

> dat
# A tibble: 937 × 13
   parent  node branch.length label                           isTip     x     y branch angle Taxon     Subtree Cluster  Source
    <int> <int>         <dbl> <chr>                           <lgl> <dbl> <dbl>  <dbl> <dbl> <chr>       <int> <chr>    <chr> 
 1    451     1    0          NR_119548_1                     TRUE  0         1  0       0.8 NA             NA NA       NA    
 2    452     2    0          SH1029311_09FU_AY997073_refs    TRUE  0         2  0       1.6 NA             NA NA       NA    
 3    453     3    0.342      SH1034525_09FU_MG764644_reps    TRUE  0.787     3  0.616   2.4 Monotypic     114 114.Mon… NA    
 4    456     4    0.490      SH1186382_09FU_UDB04688109_reps TRUE  1.37      9  1.12    7.2 Monotypic     114 114.Mon… NA    
 5    459     5    1.76       ASV_2902                        TRUE  3.88     14  3.00   11.2 Monotypic     114 114.Mon… query 
 6    468     6    0.185      ASV_19012                       TRUE  3.82    402  3.73  322.  Monotypic     114 114.Mon… query 
 7    472     7    0.257      ASV_1653                        TRUE  4.03    419  3.90  335.  Monotypic     114 114.Mon… query 
 8    474     8    0.304      ASV_480                         TRUE  4.09    425  3.93  340   Monotypic     114 114.Mon… query 
 9    476     9    0.0812     ASV_16839                       TRUE  3.99    428  3.95  342.  Monotypic     114 114.Mon… query 
10    482    10    0.00000244 ASV_305                         TRUE  4.08    445  4.08  356   NA             NA NA       query 
# ℹ 927 more rows
# ℹ Use `print(n = ...)` to see more rows

 

개인적으로 2가 더 편한듯