我有一个100k + obs和12 cols的df。其中一个cols是某种我需要用来制作另一个基于另一个df的列的id。这个其他df只有50个obs和一个col是id和我需要复制到第一个df的值。
我无法对此进行编码。这是部分df(两者)我只显示此问题的相关cols
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
的dfid 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
任何想法都表示赞赏。谢谢你的时间。
问候
答案 0 :(得分:3)
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
答案 1 :(得分:3)
您可以尝试这样的事情:
df3 <- merge(df1, df2, by="id", all = TRUE)
您需要设置all = TRUE
或df3中仅存在df2行。