繁体   English   中英

根据从另一个数据框中的ID中选择的值分配新列

[英]Assign new column based on a value chosen from an id in another dataframe

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

我无法对此进行编码。 这是部分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的ID在df的新列中添加val,如下所示:

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是您想要的,或者使用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 FAQ可能是了解该程序包细微差别的最佳位置: http://datatable.r-forge.r -project.org/datatable-faq.pdf

您可以尝试如下操作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM