我有一个像这样的东西:
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
我该怎么做?
答案 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)))