【问题标题】: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 ,所有这些都将返回单个值,除非应用一些函数或循环。

标签: r dataframe mean


【解决方案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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多