2012-01-18 81 views
6

我想申請在迭代的方式統計的數據框的列:[R疊代列數據框

列數1:「A」代表,我想區分標籤:

for (i in names(dataframe)) { 
    i <- as.name(i) 
    group1 <- i[A=="locationX"] 
    group2 <- i[A!="locationX"] 
    p <- wilcox.test(group1,group2,na.action(na.omit))$p.value 
} 

但是,as.name()將嘗試從names(dataframe)生成的列名稱中刪除引號。

不幸的是它給我的錯誤:

Error in i[A == "locationX"] : object of type 'symbol' is not subsettable

我覺得as.name()是不這樣做的正確方法。

任何線索?

+1

你能舉個例子'A',也可能是'head(dataframe)'(它只是讓我們看看你的數據框)嗎? – 2012-01-18 00:07:58

回答

8

這是有意義的,如果爲「A」可與「locationX」 和逆爲「A」的長度的多個實例的多個實例的載體是相同的,唯一的方法「數據框」中的行數。如果是這樣的話,那麼這樣的事情可能工作:

p <- list() 
for (i in names(dataframe)) { 
    # using as.names not needed and possibly harmful 
    group1 <- dataframe[[i]][A == "locationX"] 
    group2 <- dataframe[[i]][A != "locationX"] 
    p[i] <- wilcox.test(group1,group2,na.action(na.omit))$p.value 
} 

請注意,即使你沒有得到你的代碼,你仍然會被覆蓋「P」通過循環每一次錯誤。