【发布时间】:2012-03-01 16:25:26
【问题描述】:
我正在使用by 根据一个因素将函数应用于数据框的范围列。如果我使用mean() 作为函数,一切都运行良好,但如果我使用median(),我会收到 "Error in median.default(x) : need numeric data" 类型的错误,即使我的数据框中没有 NA。
使用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.
但如果我使用median()(注意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
但是,如果我不选择列的范围[,1:3],而是只选择它有效的列之一:
> 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
如何在选择一系列列时实现此行为?
【问题讨论】:
-
您在使用
mean时收到的警告消息应该是一个强有力的线索,事实上,一切都不是“正常”的。我最近的answer 可能会为您提供一些启示。
标签: r