2012-07-10 69 views
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相互作用不需要這些交互只是在我面臨的問題的性質。)

R有沒有一種簡潔的方法來獲得df.combined

+0

爲什麼不V1:V2和V3:V4呢? – Chase 2012-07-10 23:16:46

+0

@Chase - 這只是我所擁有的特殊任務。它要求在不同數據框中的列之間進行交互,但不要在同一數據框中的列之間進行交互。我編輯我的帖子來說。 – user697473 2012-07-10 23:55:59

回答

0

如果在名稱中冒號不是必需的,它的代碼只有一行一個同時列綁定兩個數據幀和創建互動的護理使用你的兩個數據幀:

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 

如果您需要在名稱中冒號,另一oneliner將改變週期以冒號:

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 
0

這是一個解決方案。也許不是非常優雅或簡潔,但可能有用...

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 
2

我不是這個滿足您的「succintly」的定義。

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 

(一般建議不要在變量名冒號。然後,他們將始終需要加引號。

相關問題