如何使用基于条件的新值替换第一列中的值

时间:2017-05-03 10:16:19

标签: r dplyr

我有一个像这样的东西:


input_data <- tibble::tribble(

 # Number of samples can be more than 2.
 # Number of genes around 24K

 ~Genes,     ~Sample1, ~Sample2,
 "Ncr1",       8.2,      10.10,
 "Il1f9",      3.2,      20.30,
 "Stfa2l1",    2.3,      0.3,
 "Klra10",     5.5,      12.0,
 "Dcn",        1.8,      0,
 "Cxcr2",      1.3,      1.1,
 "Foo",        20,       70
)

input_data
#> # A tibble: 7 × 3
#>     Genes Sample1 Sample2
#>     <chr>   <dbl>   <dbl>
#> 1    Ncr1     8.2    10.1
#> 2   Il1f9     3.2    20.3
#> 3 Stfa2l1     2.3     0.3
#> 4  Klra10     5.5    12.0
#> 5     Dcn     1.8     0.0
#> 6   Cxcr2     1.3     1.1
#> 7     Foo    20.0    70.0

我想要做的是从第二列(Sample1)开始替换值。 请注意,样本名称可以是任何名称,因此最好使用列索引。

如果值小于k=2.0,请将其替换为0。 最后,我们希望得到这个结果:

  Genes Sample1 Sample2
  Ncr1     8.2    10.1
  Il1f9    3.2    20.3
  Stfa2l1  2.3     0
  Klra10   5.5    12.0
  Dcn       0      0.0
  Cxcr2     0       0
  Foo    20.0    70.0

我该怎么做?

1 个答案:

答案 0 :(得分:3)

我们可以使用tidyverse

library(tidyverse)
input_data %>% 
       mutate_at(vars(matches("Sample")), funs(replace(., .<2, 0)))
# A tibble: 7 × 3
#    Genes Sample1 Sample2
#    <chr>   <dbl>   <dbl>
#1    Ncr1     8.2    10.1
#2   Il1f9     3.2    20.3
#3 Stfa2l1     2.3     0.0
#4  Klra10     5.5    12.0
#5     Dcn     0.0     0.0
#6   Cxcr2     0.0     0.0
#7     Foo    20.0    70.0

或者,如果我们想要列索引

input_data %>% 
      mutate_at(2:3, funs(replace(., .<2, 0)))