Tôi đang sử dụng by
để áp dụng hàm cho một cột phạm vi của khung dữ liệu dựa trên một yếu tố. Mọi thứ hoạt động hoàn hảo tốt nếu tôi sử dụng hàm mean()
làm chức năng nhưng nếu tôi sử dụng median()
Tôi gặp lỗi loại "Lỗi trong median.default (x): cần dữ liệu số" ngay cả khi tôi không có NA trong dữ liệu khung.Làm thế nào để áp dụng một hàm cho một tập hợp các cột trong r?
Điểm mấu rằng công trình sử dụng mean()
:
by(iris[,1:3], iris$Species, function(x) mean(x,na.rm=T))
> by(iris[,1:3], iris$Species, function(x) mean(x,na.rm=T))
iris$Species: setosa
Sepal.Length Sepal.Width Petal.Length
5.006 3.428 1.462
------------------------------------------------------------
iris$Species: versicolor
Sepal.Length Sepal.Width Petal.Length
5.936 2.770 4.260
------------------------------------------------------------
iris$Species: virginica
Sepal.Length Sepal.Width Petal.Length
6.588 2.974 5.552
Warning messages:
1: mean(<data.frame>) is deprecated.
Use colMeans() or sapply(*, mean) instead.
2: mean(<data.frame>) is deprecated.
Use colMeans() or sapply(*, mean) instead.
3: mean(<data.frame>) is deprecated.
Use colMeans() or sapply(*, mean) instead.
Nhưng nếu tôi sử dụng median()
(chú ý na.rm=T option
):
> by(iris[,1:3], iris$Species, function(x) median(x,na.rm=T))
Error in median.default(x, na.rm = T) : need numeric data
Tuy nhiên nếu thay vì chọn phạm vi [,1:3]
cột tôi chọn chỉ có một của các cột hoạt động:
> by(iris[,1], iris$Species, function(x) median(x,na.rm=T))
iris$Species: setosa
[1] 5
------------------------------------------------------------
iris$Species: versicolor
[1] 5.9
------------------------------------------------------------
iris$Species: virginica
[1] 6.5
Làm thế nào tôi có thể đạt được hành vi này trong khi chọn một loạt các cột?
Các thông điệp cảnh báo bạn nhận được khi bạn sử dụng 'mean' phải là manh mối mạnh mẽ, trên thực tế, mọi thứ không hoạt động" tốt ". [Answer] http://stackoverflow.com/a/9424510/324364) gần đây của tôi có thể làm sáng tỏ điều này cho bạn. – joran