2017-05-03 40 views
1

我有這樣一個tibble一個新值:如何更換在第一列的值開始與基於狀態


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 

我想要做的就是從替換值第二列(樣本1)向前。 請不要說樣本名稱可以是任何東西,所以最好使用列索引。

如果該值小於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 

我怎麼能這樣做?

+7

簡單:'input_data [input_data <2] < - 0'? – BigDataScientist

回答

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))) 
+0

我們可以使用列索引嗎? Cos,樣本名稱可以是任何東西。 – neversaint

+1

@neversaint好的,更新了帖子 – akrun