我有一个巨大的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。
答案 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创建。