我正在使用
使用
然而,如果我选择的不是列范围
如何在选择一系列列时实现此行为?
by
来对数据帧的一组列应用函数,基于一个因子。如果我使用 mean()
作为函数,一切都可以运行得很完美,但是如果我使用 median()
,我会得到一个类型为 "Error in median.default(x) : need numeric data" 的错误信息,即使在数据框中没有缺失值。使用
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
参数):
> 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
函数时收到的警告信息应该是一个强烈的提示,实际上,并不是一切都“正常运行”。我最近的回答可能会为您解决这个问题。 - joran