gpt4 book ai didi

r - 如何将函数应用于 r 中的列子集?

转载 作者:行者123 更新时间:2023-12-04 12:28:20 25 4
gpt4 key购买 nike

我正在使用 by将函数应用于 范围列 基于因子的数据框。如果我使用 mean() 一切正常作为函数,但如果我使用 median()即使我在数据框中没有 NA,我也会收到类型为“中值错误(x):需要数字数据”的错误。

使用 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

在选择一系列列时如何实现这种行为?

最佳答案

当您使用 by 时,您正在使用拆分应用策略.传递给函数的对象是数据帧,由于 median.data.frame 不存在,您会收到警告和错误。以及即将消失的 mean.data.frame .如果您使用 aggregate 可能效果会更好:

> aggregate(iris[,1:3], iris["Species"], function(x) mean(x,na.rm=T))
Species Sepal.Length Sepal.Width Petal.Length
1 setosa 5.006 3.428 1.462
2 versicolor 5.936 2.770 4.260
3 virginica 6.588 2.974 5.552
> aggregate(iris[,1:3], iris["Species"], function(x) median(x,na.rm=T))
Species Sepal.Length Sepal.Width Petal.Length
1 setosa 5.0 3.4 1.50
2 versicolor 5.9 2.8 4.35
3 virginica 6.5 3.0 5.55
aggregate单独处理列向量,然后将结果制成表格。

关于r - 如何将函数应用于 r 中的列子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com