2012-09-11 42 views
6

Hãy nói tôi có khung dữ liệu sau trong R:Làm thế nào để loại bỏ cột khung dữ liệu với một giá trị duy nhất

df1 <- data.frame(Item_Name = c("test1","test2","test3"), D_1=c(1,0,1), 
        D_2=c(1,1,1), D_3=c(11,3,1)) 

Tôi muốn tạo một hàm đó sẽ xóa các cột không có sai (ví dụ ở đây trường hợp, nó sẽ xóa cột D_2 vì nó chỉ có 1 giá trị)

Tôi biết rằng tôi có thể kiểm tra bằng tay, nhưng trên thực tế dữ liệu của tôi rất lớn và tôi muốn tự động hóa nó. Bất kỳ ý tưởng?

Trả lời

9

Filter là một chức năng hữu ích tại đây. Tôi sẽ chỉ lọc cho những nơi có nhiều hơn 1 giá trị duy nhất.

ví dụ:

Filter(function(x)(length(unique(x))>1), df1) 

## Item_Name D_1 D_3 
## 1  test1 1 11 
## 2  test2 0 3 
## 3  test3 1 1 
8

Bạn có thể làm:

df1[c(TRUE, lapply(df1[-1], var, na.rm = TRUE) != 0)] 
# Item_Name D_1 D_3 
# 1  test1 1 11 
# 2  test2 0 3 
# 3  test3 1 1 

nơi mảnh lapply cho bạn biết những gì biến có một số khác biệt:

lapply(df1[-1], var, na.rm = TRUE) != 0 
# D_1 D_2 D_3 
# TRUE FALSE TRUE 
Các vấn đề liên quan