【问题标题】:Assign new column based on a value chosen from an id in another dataframe根据从另一个数据框中的 id 中选择的值分配新列
【发布时间】:2012-04-19 17:47:12
【问题描述】:

我有 100k+ obs 和 12 cols 的 df。其中一个列是某种 id,我需要使用它来制作基于另一个 df 的另一列。另一个 df 只有 50 个 obs,一个 col 是我需要复制到第一个 df 的 id 和值。

我无法编写此代码。这是一个部分 df(两者)我只显示这个问题的相关列

DF1 (100k+ obs)

id
010100
010100
010100
010100
010100
010100
010200
010200
010200
010201
010201
010201
010201
010201
010201
010201
010300
010300
010300
010300
010300
010400
010400
010400
010500
010500
010501
010501
010501
010600
010600
010600
010600

这是带有值和 id 的第二个 df

id         val
010100  1
010200  2
010201  2
010300  3
010400  4
010500  5
010501  6
010600  7

我需要在 df 的新列中添加 val,具体取决于两个 df 的 id,如下所示:

id  New
010100  1
010100  1
010100  1
010100  1
010100  1
010100  1
010200  2
010200  2
010200  2
010201  2
010201  2
010201  2
010201  2
010201  2
010201  2
010201  2
010300  3
010300  3
010300  3
010300  3
010300  3
010400  4
010400  4
010400  4
010500  5
010500  5
010501  6
010501  6
010501  6
010600  7
010600  7
010600  7
010600  7

任何想法都值得赞赏。感谢您的宝贵时间。

问候

【问题讨论】:

  • ?merge 加上一些文字可以达到 15 个字符。
  • 谢谢大家。我尝试了合并但没有 all=T。这成功了。

标签: r merge data.table


【解决方案1】:

你可以试试这样的:

df3 <- merge(df1, df2, by="id", all = TRUE)

您需要设置all = TRUE,否则df3中将只存在df2行。

【讨论】:

    【解决方案2】:

    merge 是您想要的,或者您可能会注意到使用 data.table 包的一些速度优势:

    df1 <- data.frame(id = 1:3)
    df2 <- data.frame(id = rep(1:3, each = 2), val = rnorm(6))
    
    > merge(df1, df2)
      id        val
    1  1  0.9462113
    2  1 -1.7835754
    3  2 -1.1604525
    4  2  0.2498844
    5  3 -1.5187111
    6  3  0.5921281
    
    library(data.table)
    dt1 <- data.table(df1, key = "id")
    dt2 <- data.table(df2, key = "id")
    
    > dt1[dt2]
         id        val
    [1,]  1  0.9462113
    [2,]  1 -1.7835754
    [3,]  2 -1.1604525
    [4,]  2  0.2498844
    [5,]  3 -1.5187111
    [6,]  3  0.5921281
    

    有关可用连接类型、匹配列等的详细信息,请参阅?merge 的帮助页面。data.table 常见问题解答可能是了解该软件包细微差别的最佳地点:http://datatable.r-forge.r-project.org/datatable-faq.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 2020-05-23
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多