Tôi đang làm việc trên một tập dữ liệu bao gồm dữ liệu cộng đồng và nhiều cột (các loài) có rất nhiều số 0. Tôi muốn có thể thả các cột này cho một số phân tích tôi đang làm, dựa trên tổng của toàn bộ cột. Tôi bị cám dỗ để làm điều này với vòng lặp for, nhưng tôi biết rằng các hàm áp dụng và theo hàm sẽ tốt hơn khi bạn sử dụng R. Mục tiêu của tôi là xóa tất cả các cột có tổng số nhỏ hơn 15. Tôi có sử dụng which()
để loại bỏ hàng bởi các yếu tố, ví dụ:Loại trừ các cột khỏi một khung dữ liệu dựa trên các khoản cột
September<-which(data$Time_point=="September")
data<-data[-September,]
và hai cách tôi đã cố gắng loại bỏ các cột là bằng cách sử dụng apply()
:
data<-data[,apply(data,2,function(x)sum(x<=15))]
và bằng cách sử dụng một hỗn độn cho vòng/nếu kết hợp khác :
for (i in 6:length(data)){
if (sum(data[,i])<=15)
data[,i]<-NULL
else
data[,i]<-data[,i]
}
Cả hai phương pháp này đều không hoạt động. Chắc chắn có một cách thanh lịch để loại bỏ các cột dựa trên các tiêu chí hợp lý?
str(head(data,10))
'data.frame': 10 obs. of 23 variables:
$ Core_num : Factor w/ 159 levels "152","153","154",..: 133 72 70 75 89 85 86 90 95 99
$ Cage_num : num 0 1 2 3 4 5 6 7 8 9
$ Treatment : Factor w/ 4 levels "","C","CC","NC": 1 2 2 2 2 2 2 2 2 2
$ Site : Factor w/ 10 levels "","B","B07","B08",..: 1 8 8 8 7 7 7 7 9 9
$ Time_point : Factor w/ 3 levels "","May","September": 1 2 2 2 2 2 2 2 2 2
$ Spionidae : num 108 0 0 0 0 0 0 0 0 0
$ Syllidae : num 185 0 0 0 3 8 0 1 4 1
$ Opheliidae : num 424 0 1 0 0 0 1 1 0 0
$ Cossuridae : num 164 0 7 3 0 0 0 0 0 0
$ Sternaspidae: num 214 0 0 6 1 0 11 9 0 0
$ Sabellidae : num 1154 0 2 2 0 ...
$ Capitellidae: num 256 1 10 17 0 3 0 0 0 0
$ Dorvillidae : num 21 1 0 0 0 0 0 0 0 0
$ Cirratulidae: num 17 0 0 0 0 0 0 0 0 0
$ Oligochaeta : num 3747 12 41 27 32 ...
$ Nematoda : num 410 5 4 13 0 0 0 2 2 0
$ Sipuncula : num 33 0 0 0 0 0 0 0 0 0
$ Ostracoda : num 335 0 1 0 0 0 0 0 0 0
$ Decapoda : num 62 0 4 0 1 0 0 0 0 0
$ Amphipoda : num 2789 75 17 34 89 ...
$ Copepoda : num 75 0 0 0 0 0 0 0 0 0
$ Tanaidacea : num 84 0 0 0 1 0 0 0 0 0
$ Mollusca : int 55 0 4 0 0 0 0 0 0 0
Nó sẽ dễ dàng hơn nhiều để giúp đỡ nếu bạn cung cấp một số dữ liệu tái sản xuất. Ví dụ, đầu ra của 'str (đầu (dữ liệu, 10))' có thể là đủ. (Các phiên bản in của dữ liệu bạn thường vô dụng, vì chúng khó sao chép + dán vào ví dụ, và chúng không cung cấp thông tin về cách dữ liệu được _stored_, điều này có thể rất quan trọng.) – joran
Cảm ơn @joran. Tôi đã chỉnh sửa câu hỏi gốc để chứa đầu ra đó. Xin lỗi vì sự bất tiện! – Margaret