【问题标题】:Loops to extract value from on dataframe to a new in R [duplicate]循环从数据帧中提取值到R中的新值[重复]
【发布时间】:2021-01-13 23:46:59
【问题描述】:

我正在尝试使用 R 进行某种循环,其中循环从 df1 中的列中搜索另一个数据帧中的列中的特定值(df2 ),如果在 df3 中找到该值,则从下一列返回一个值。

df1、df2 和 df3 中想要的结果的简单示例如下所示。我将非常感谢一些帮助,因为我在 R 方面不是很有经验,因此很难弄清楚循环..

> df1
Col1
A
B
C
D
E
F
G
> df2
Col1    Val1
A       1
B       3
B       5
H       3
E       7
G       2
K       9
G       1
> df3
Col1   Val1
A      1
B      3
B      5
E      7
G      2
G      1

【问题讨论】:

    标签: r loops iteration


    【解决方案1】:

    在基础 R 中:

    df1 <- read.table(h=T, text="
    Col1
    A
    B
    C
    D
    E
    F
    G")
    df2 <- read.table(h=T, text="
    Col1    Val1
    A       1
    B       3
    B       5
    H       3
    E       7
    G       2
    K       9
    G       1")
    
    merge(df1, df2)
    #>   Col1 Val1
    #> 1    A    1
    #> 2    B    3
    #> 3    B    5
    #> 4    E    7
    #> 5    G    2
    #> 6    G    1
    

    由reprex package (v0.3.0) 于 2020 年 9 月 28 日创建

    您可能希望设置参数all.x = TRUE 来进行左连接。

    【讨论】:

      【解决方案2】:

      使用tidyverse/dplyr...

      library(dplyr)
      
      df1 <-
        tribble(
          ~Col1,
          "A",
          "B",
          "C",
          "D",
          "E",
          "F",
          "G"
        )
      
      df2 <-
        tribble(
          ~Col1, ~Val1,
          "A",   1,
          "B",   3,
          "B",   5,
          "H",   3,
          "E",   7,
          "G",   2,
          "K",   9,
          "G",   1
        )
      
      df1 %>% inner_join(df2)
      #> Joining, by = "Col1"
      #> # A tibble: 6 x 2
      #>   Col1   Val1
      #>   <chr> <dbl>
      #> 1 A         1
      #> 2 B         3
      #> 3 B         5
      #> 4 E         7
      #> 5 G         2
      #> 6 G         1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 2013-05-05
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        • 1970-01-01
        相关资源
        最近更新 更多