7

expand.grid与えられたベクトルのすべての組み合わせを作成することです。しかし、データ フレームの各行を一意として、データ フレームとベクトルのすべての組み合わせを生成する方法はありますか。例えば、

df <- data.frame(a = 1:3, b = 5:7)
c <- 9:10

dfc展開なしの組み合わせである新しいデータフレームを作成する方法df

df.c:
a b c
1 5 9
2 6 9
3 7 9
1 5 10
2 6 10
3 7 10

ありがとう!

4

3 に答える 3

13

私にとって最も簡単な方法はmerge(df, as.data.frame(c))

  a b  c
1 1 5  9
2 2 6  9
3 3 7  9
4 1 5 10
5 2 6 10
6 3 7 10
于 2016-01-20T12:57:17.783 に答える
7

データフレームの行ごとに 2 つ以上の列がある場合、これはスケーリングされない場合がありますがexpand.grid、最初の列とmerge2 番目の列でのみ使用できます。

df <- data.frame(a = 1:3, b = 5:7)
c <- 9:10
combined <- expand.grid(a=df$a, c=c)
combined <- merge(combined, df)
> combined[order(combined$c), ]
  a  c b
1 1  9 5
3 2  9 6
5 3  9 7
2 1 10 5
4 2 10 6
6 3 10 7
于 2012-11-28T01:15:03.243 に答える
3

このようなこともできます

do.call(rbind,lapply(9:10, function(x,d) data.frame(d, c=x), d=df)))

# or using rbindlist as a fast alternative  to do.call(rbind,list)
library(data.table)
rbindlist(lapply(9:10, function(x,d) data.frame(d, c=x), d=df)))

また

rbindlist(Map(data.frame, c = 9:10, MoreArgs = list(a= 1:3,b=5:7)))
于 2012-11-28T01:37:10.023 に答える