2017-05-03 13 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 

私は何をしたいから値を交換することです第2列(サンプル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 

は、私はそれをどのように行うことができますか? - '0' INPUT_DATA [INPUT_DATA <は2] <:

+7

をしたい場合に使用することができますか? – 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

関連する問題