【问题标题】:How to match two column values in df1 and extract corresponding values in R如何匹配df1中的两列值并提取R中的对应值
【发布时间】:2022-02-07 16:28:02
【问题描述】:

表 1:

Pos Samples
129 ERR5678
460 ERR7890
568 ERR7689

表 2:

Pos ERR5678 ERR7890 ERR7689
129 67890 76879 67894
460 56782 123478 678390
568 78926 890765 345678

结果表

Pos Samples Dp_value
129 ERR5678 67890
460 ERR7890 123478
568 ERR7689 345678

表 1 包含位置列表及其对应样本,另一个表包含每个样本的位置和深度值。使用 R,两个表读入 data.table 然后我使用:df1[(df1$Pos%in%df2%pos),]

它提取了位置。请有人告诉我如何匹配 df2 中的 Pos 和 Samples 以获得结果表。

【问题讨论】:

  • 您好!为了获得更好的答案,它有助于提供数据的 dput,以便人们可以在工作中使用可重现的数据集。

标签: r matrix subset


【解决方案1】:

将第二个数据重塑为“长”格式并执行inner_join

library(dplyr)
library(tidyr)
df2 %>%
    pivot_longer(cols = starts_with("ERR"), 
       names_to = "Samples", values_to = "Dp_value") %>% 
   inner_join(df1)

-输出

# A tibble: 3 × 3
    Pos Samples Dp_value
  <int> <chr>      <int>
1   129 ERR5678    67890
2   460 ERR7890   123478
3   568 ERR7689   345678

数据

df1 <- structure(list(Pos = c(129L, 460L, 568L), Samples = c("ERR5678", 
"ERR7890", "ERR7689")), class = "data.frame", row.names = c(NA, 
-3L))

df2 <- structure(list(Pos = c(129L, 460L, 568L), ERR5678 = c(67890L, 
56782L, 78926L), ERR7890 = c(76879L, 123478L, 890765L), ERR7689 = c(67894L, 
678390L, 345678L)), class = "data.frame", row.names = c(NA, -3L
))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多