2012-01-18 42 views
6

Tôi muốn áp dụng thống kê để các cột của một dataframe theo kiểu lặp:R lặp trên cột dataframe

cột số 1: 'A' đại diện cho các thẻ mà tôi muốn phân biệt đối xử:

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 
} 
Tuy nhiên,

, as.name() là cố gắng loại bỏ các dấu phẩy ngược từ các tên cột được tạo bởi names(dataframe).

Đáng tiếc là nó mang lại cho tôi những lỗi:

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

Tôi nghĩ as.name() không phải là cách đúng đắn để làm điều đó.

Bất kỳ manh mối nào?

+1

bạn có thể đưa ra ví dụ 'A' và cũng có thể' đầu (dataframe) '(chỉ cung cấp cho chúng ta cái nhìn về khung dữ liệu của bạn)? –

Trả lời

8

Cách duy nhất này có ý nghĩa nếu cho "A" là một vector với nhiều trường hợp của "locationX" nhiều instance của converse cho chiều dài của "A" để được giống như các số hàng trong "dataframe". Nếu đúng như vậy thì một cái gì đó như thế này có thể làm việc:

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 
} 

Lưu ý rằng ngay cả khi bạn không nhận được một lỗi với mã của bạn mà bạn sẽ vẫn được ghi đè "p" mỗi khi qua các vòng lặp.

Các vấn đề liên quan