逐行计算数据帧的平均值

Posted

技术标签:

【中文标题】逐行计算数据帧的平均值【英文标题】:Calculate mean of data frame by row 【发布时间】:2021-06-23 09:20:07 【问题描述】:

有没有办法从数据框中计算一行的平均值?

例如:

df <- data.frame(X = c(1,1,1,1,2,2), Y = c(1,4,4,4,4,3), Z = c(2,5,6,8,3,1))

df
  X Y Z
1 1 1 2
2 1 4 5
3 1 4 6
4 1 4 8
5 2 4 3
6 2 3 1

那么如何计算每行的平均值?

mean(df[,1:3])

我真的不明白为什么这不起作用,我的意思是相同的代码适用于例如 min()max() 但不适用于 mean()

min(df[,1:3])

[1] 1

【问题讨论】:

rowMeans(df[,1:3])apply(df[,1:3],1, mean) 好的,谢谢,这行得通。但是 mean() 的行为与 min() 或 max() 不同的原因是什么 你错了,最小值或最大值都不能正常工作,它们应该只返回单个值,但你的要求是按行返回,你需要使用 pmin 或 pmax 来获得逐行值.阅读更多关于 R 中的向量化函数 mean/sum/min/max ,所有这些都将返回单个值,除非应用一些函数或循环。 【参考方案1】:

当您说df[,1:3] 时,您选择的是df 的所有行和1:3 的列。当您对其应用minmax 时,它只是在所有数字中查找min/maxrow 不是这样做的。

因此,当您尝试对mean 应用相同的逻辑时,它会再次在所有三列的所有数字中找到mean 值。同样,不是row

您需要将apply 一个函数转换为df 的维度。为此,请按照 PKumar 的建议使用 apply(df, 1, mean)。如果您需要每列的mean,请说apply(df, 2, mean)。要了解有关 apply 的更多信息,请在 R 控制台上输入 ?apply

rowMeanscolMeansapply 的快捷方式。

【讨论】:

【参考方案2】:

为此,您需要使用应用功能 您可以使用以下语法计算所有行的平均值

apply(df,1, mean)
[1] 1.333333 3.333333 3.666667 4.333333 3.000000 2.000000

#当第二个参数为1时,计算每一行的平均值,如果设置为2,则计算每一列

要计算特定行的平均值,您需要对该行进行子集化 使用以下代码

> apply(df[4,],1, mean) #here you compute the mean of the 4th row
#output
       4 
4.333333 

【讨论】:

以上是关于逐行计算数据帧的平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个功能应用于dask数据帧的多个块?

两个数据帧的数组列的平均值并在pyspark中找到最大索引

查找特定行数 pandas 数据帧的平均值

根据时间频率将特定函数应用于数据帧的某个子集

如何获得与R一样的Pandas数据帧的类似摘要?

(运行的干净代码)根据来自另一个数据帧的日期间隔和字符串条件获取一个数据帧中的值的平均值