比赛后是否存在data.frame

时间:2018-10-01 20:08:19

标签: r

我有一个巨大的data.frame,看起来像这样:

  Gene     Sample1     Sample2      Sample3    .....
   A         0.34        0.99          1
   B         1.3         9.4           67
   D          13         2             284
   H         456         0.11          0.22
   G          0          32            0.8             
    ............

总共12.000行和150列。

另一个向量:

       Measurements    
           0.8
           0.34
           0.22
            1
           32        

我只是想将向量与data.frame的每一列进行匹配,并获得一个最终的数据帧,如下所示:

 Gene     Sample1     Sample2      Sample3    .....
   A         0.34        NA           1
   B          NA         NA           NA
   D          NA         NA           NA
   H          NA         NA          0.22
   G          NA         32          0.8        

NA是不在向量中的值。

有人可以帮我吗?

提前谢谢

B。

1 个答案:

答案 0 :(得分:2)

您可以使用SELECT @OldInsurer = [Insurer] , @OldInsuranceResponsible = [InsuranceResponsible] , @OldTicketNr = [TicketNr] , @OldInsReviewId = [InsReviewId] , @OldComment = [Comment] , @OldIdInsurance = [IdInsurance] FROM tableA WHERE Id = @IdInsurance and YearReview=@YearReview 比较来比较每一列。但是请注意这种浮点数比较。对于此示例,它可以正常运行:

if_else

但是,如下所示,您并不总是有一种比较应该相等的值的好方法。

library(tidyverse)
tbl <- read_table2(
"Gene     Sample1     Sample2      Sample3
A         0.34        0.99          1
B         1.3         9.4           67
D          13         2             284
H         456         0.11          0.22
G          0          32            0.8"
)
Measurements <- c(0.8, 0.34, 0.22, 1, 32)
tbl %>%
  mutate_at(vars(-Gene), ~if_else(. %in% Measurements, ., NA_real_))
#> # A tibble: 5 x 4
#>   Gene  Sample1 Sample2 Sample3
#>   <chr>   <dbl>   <dbl>   <dbl>
#> 1 A        0.34      NA    1   
#> 2 B       NA         NA   NA   
#> 3 D       NA         NA   NA   
#> 4 H       NA         NA    0.22
#> 5 G       NA         32    0.8

您可以通过匹配字符向量来解决此问题:

(1.1-0.2) %in% c(0.9)
#> [1] FALSE

但这会带来一系列问题,因为数值上等效的字符串在字符上不会等效。

tbl %>%
  mutate_all(as.character) %>%
  mutate_at(vars(-Gene), ~if_else(. %in% as.character(Measurements), ., NA_character_))
#> # A tibble: 5 x 4
#>   Gene  Sample1 Sample2 Sample3
#>   <chr> <chr>   <chr>   <chr>  
#> 1 A     0.34    <NA>    1      
#> 2 B     <NA>    <NA>    <NA>   
#> 3 D     <NA>    <NA>    <NA>   
#> 4 H     <NA>    <NA>    0.22   
#> 5 G     <NA>    32      0.8

reprex package(v0.2.0)于2018-10-01创建。