2014-02-22 62 views
0

我有兩個數據幀(比如說frame1和frame2)。每個變量都有大量的變量(比如frame1有變量a1,a2,a3 ...,而frame2有變量b1,b2,b3 ...)。我正在做兩個框架之間所有可能的變量對之間獨立性的卡方檢驗(在a1和b1之間; a1和b2; a1和b3,...等等之間)。我正在使用以下for循環來完成這項工作,除了在輸出中我完全得到的結果是沒有指定哪些分析屬於哪組變量的結果。我希望以某種方式獲得結果,以便每個個體分析之前都有分析的兩個變量名稱。使用for循環打印數據幀的列名稱

for (i in frame1) { 
for (j in frame2) 
print({chisq.test(table(i,j))})} 

R對我來說很新,所以任何幫助將不勝感激!

回答

1

你能做這樣的事嗎?

for (i in 1:ncol(frame1)) { 
    for (j in 1:ncol(frame2)) { 
    print(colnames(frame1)[i]) 
    print(colnames(frame2)[j]) 
    print({chisq.test(table(frame1[,i],frame2[,j]))}) 
    } 
} 
1

您不需要循環,因此將結果存儲在列表中可能會更加方便。下面是一些假的數據爲例:

frame1 <- data.frame(a1=rnorm(10), a2=rnorm(10), a3=rnorm(10), a4=rnorm(10)) 
frame2 <- data.frame(b1=rnorm(10), b2=rnorm(10), b3=rnorm(10), b4=rnorm(10)) 

# setup all column combinations 
cols <- expand.grid(1:ncol(frame1), 1:ncol(frame2)) 

# output to named list 
setNames(apply(cols, 1, function(x) { 
    chisq.test(table(frame1[,x[1]], frame2[,x[2]])) 
}), paste(names(frame1)[cols[,1]], names(frame2)[cols[,2]], sep=':')) 

結果(第幾個條目):

$`a1:b1` 

     Pearson's Chi-squared test 

data: table(frame1[, x[1]], frame2[, x[2]]) 
X-squared = 90, df = 81, p-value = 0.2313 


$`a2:b1` 

     Pearson's Chi-squared test 

data: table(frame1[, x[1]], frame2[, x[2]]) 
X-squared = 90, df = 81, p-value = 0.2313 


$`a3:b1` 

     Pearson's Chi-squared test 

data: table(frame1[, x[1]], frame2[, x[2]]) 
X-squared = 90, df = 81, p-value = 0.2313 


$`a4:b1` 

     Pearson's Chi-squared test 

data: table(frame1[, x[1]], frame2[, x[2]]) 
X-squared = 90, df = 81, p-value = 0.2313 


$`a1:b2` 

     Pearson's Chi-squared test 

data: table(frame1[, x[1]], frame2[, x[2]]) 
X-squared = 90, df = 81, p-value = 0.2313 

...