2

2 つの 2x2 データ フレームがあります。各データ フレームの各列は係数です。

各因子と因子間の相互作用を含む 2x8 データ フレームを作成したいと考えています。

次に例を示します。

df1 <- data.frame(V1 = factor(c('a', 'b')), V2 = factor(c('c', 'd')))
df2 <- data.frame(V3 = factor(c('e', 'f')), V4 = factor(c('g', 'h')))
df.combined <- combine(df1, df2)

どこdf.combinedだろう

V1 V2 V3 V4 V1:V3 V1:V4 V2:V3 V2:V4
 a  c  e  g   a:e   a:g   c:e   c:g
 b  c  f  h   b:f   b:h   d:f   d:h

(V1:V2 または V3:V4 の相互作用は必要ありません。これらの相互作用が必要ないのは、私が直面している問題の性質上です。)

df.combinedRに入る簡潔な方法はありますか?

4

3 に答える 3

2

私はこれがあなたの「簡潔に」の定義を満たしているとは思っていません。

dfc <- cbind(df1,df2)
dfc2<- cbind( dfc, `V1:V3`=interaction(dfc$V1, dfc$V3, sep=":"), 
                   `V1:V4`=interaction(dfc$V1,dfc$V4, sep=":") )
df.combined <- cbind( dfc2, `V2:V3`=interaction(dfc$V2, dfc$V3, sep=":"), 
                            `V2:V4`=interaction(dfc$V2,dfc$V4, sep=":") )
> df.combined
  V1 V2 V3 V4 V1:V3 V1:V4 V2:V3 V2:V4
1  a  c  e  g   a:e   a:g   c:e   c:g
2  b  d  f  h   b:f   b:h   d:f   d:h

(通常、変数名にコロンを使用することはお勧めしません。その場合、コロンは常に引用符で囲む必要があります。

于 2012-07-10T23:44:46.653 に答える
0

名前のコロンが不要な場合は、2つのデータフレームをバインドする列と相互作用を作成する列の両方を処理するのは、1行のコードだけです。2つのデータフレームの使用:

df.combined <- with(c(df1, df2), data.frame(df1, df2, V1:V3, V1:V4, V2:V3, V2:V4))

これは

  V1 V2 V3 V4 V1.V3 V1.V4 V2.V3 V2.V4
1  a  c  e  g   a:e   a:g   c:e   c:g
2  b  d  f  h   b:f   b:h   d:f   d:h

名前にコロンが必要な場合は、別のワンライナーがピリオドをコロンに変更します。

colnames(df.combined) <- gsub("\\.", ":", colnames(df.combined))

最終結果を残す

  V1 V2 V3 V4 V1:V3 V1:V4 V2:V3 V2:V4
1  a  c  e  g   a:e   a:g   c:e   c:g
2  b  d  f  h   b:f   b:h   d:f   d:h
于 2012-07-11T04:17:28.923 に答える
0

これが1つの解決策です。それほどエレガントでも簡潔でもないかもしれませんが、おそらく便利です...

dat <- data.frame(V1=c("a", "b"),
                  V2=c("c", "d"),
                  V3=c("e", "f"), 
                  V4=c("g", "h"))

factor_pairs <- expand.grid(c("V1", "V2"), 
                            c("V3", "V4"),
                            stringsAsFactors=FALSE)

for (i in 1:nrow(factor_pairs)) {
    factor_1 <- factor_pairs[i, 1]
    factor_2 <- factor_pairs[i, 2]
    new_col_name <- paste(factor_1, factor_2, sep=":")
    dat[[new_col_name]] <- paste(dat[[factor_1]], dat[[factor_2]], sep=":")
}

dat
#   V1 V2 V3 V4 V1:V3 V2:V3 V1:V4 V2:V4
# 1  a  c  e  g   a:e   c:e   a:g   c:g
# 2  b  d  f  h   b:f   d:f   b:h   d:h
于 2012-07-10T23:32:13.653 に答える