逐行计算数据帧的平均值
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
的列。当您对其应用min
或max
时,它只是在所有数字中查找min/max
。 row
不是这样做的。
因此,当您尝试对mean
应用相同的逻辑时,它会再次在所有三列的所有数字中找到mean
值。同样,不是row
。
您需要将apply
一个函数转换为df
的维度。为此,请按照 PKumar 的建议使用 apply(df, 1, mean)
。如果您需要每列的mean
,请说apply(df, 2, mean)
。要了解有关 apply
的更多信息,请在 R 控制台上输入 ?apply
。
rowMeans
和 colMeans
是 apply
的快捷方式。
【讨论】:
【参考方案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
【讨论】:
以上是关于逐行计算数据帧的平均值的主要内容,如果未能解决你的问题,请参考以下文章