为 R 中数据 2 中的每个 ID 重复数据帧 1
repeat dataframe 1 for each id in data 2 in R
我有两个数据框:
df1 看起来像 2273780 其他 ID:
id
XIZ92
DA8J0
df2 看起来像 29435 其他 COMR :
COMR
9868
9875
1234
我想要一个 df3,它为每个 ID 复制所有 COMR,如下所示:
id COMR
XIZ92 9868
XIZ92 9875
XIZ92 1234
DA8J0 9868
DA8J0 9875
DA8J0 1234
我确信这是一个简单的方法,但我找不到解决方法。谢谢!
两个选项:
base::merge
:
merge(dat1, dat2, by = NULL)
# id COMR
# 1 XIZ92 9868
# 2 DA8J0 9868
# 3 XIZ92 9875
# 4 DA8J0 9875
# 5 XIZ92 1234
# 6 DA8J0 1234
即使在任一框架中有多个列,这也是如此。
(这不适用于 data.table
对象,因为 data.table::merge.data.table
需要非空 by
参数。)
expand.grid
:
do.call(expand.grid, c(dat1, dat2))
# id COMR
# 1 XIZ92 9868
# 2 DA8J0 9868
# 3 XIZ92 9875
# 4 DA8J0 9875
# 5 XIZ92 1234
# 6 DA8J0 1234
只要每一帧中只有一列,这就有效;如果有两列或更多列,则会不必要地爆炸。试试吧!
dat2$ign <- 1
nrow(do.call(expand.grid, c(dat1, dat2)))
# [1] 18 # expecting 6
我有两个数据框:
df1 看起来像 2273780 其他 ID:
id
XIZ92
DA8J0
df2 看起来像 29435 其他 COMR :
COMR
9868
9875
1234
我想要一个 df3,它为每个 ID 复制所有 COMR,如下所示:
id COMR
XIZ92 9868
XIZ92 9875
XIZ92 1234
DA8J0 9868
DA8J0 9875
DA8J0 1234
我确信这是一个简单的方法,但我找不到解决方法。谢谢!
两个选项:
base::merge
:merge(dat1, dat2, by = NULL) # id COMR # 1 XIZ92 9868 # 2 DA8J0 9868 # 3 XIZ92 9875 # 4 DA8J0 9875 # 5 XIZ92 1234 # 6 DA8J0 1234
即使在任一框架中有多个列,这也是如此。
(这不适用于
data.table
对象,因为data.table::merge.data.table
需要非空by
参数。)expand.grid
:do.call(expand.grid, c(dat1, dat2)) # id COMR # 1 XIZ92 9868 # 2 DA8J0 9868 # 3 XIZ92 9875 # 4 DA8J0 9875 # 5 XIZ92 1234 # 6 DA8J0 1234
只要每一帧中只有一列,这就有效;如果有两列或更多列,则会不必要地爆炸。试试吧!
dat2$ign <- 1 nrow(do.call(expand.grid, c(dat1, dat2))) # [1] 18 # expecting 6