【问题标题】:Compute rowMeans across different columns in each row计算每行中不同列的 rowMeans
【发布时间】:2019-10-18 21:49:56
【问题描述】:

我有一个这样的 DF:

df <- read.table(text = "x1 x2 x3 x4 x5 x6 start end
                    1 2 2 1 2 3 2 6 
                    2 3 2  5  7  9 1 3 
                    1 9 12 6 1 1 3 6 ", header = TRUE)

startend 表示应包含在rowMeans 中的列数。即第一行:平均从 x2 到 x6;第二行:从 x1 到 x3 的平均值,以此类推

我试过这个没有成功:

df$means <- rowMeans(df[,df$X7:df$X8]) 

【问题讨论】:

    标签: r dataframe mean


    【解决方案1】:

    apply 的一种方式:

    apply(df, 1, function(x) mean(as.numeric(x[x[7]:x[8]], na.rm = TRUE)))
    #[1] 2.000000 2.333333 5.000000
    

    有点描述。 apply 将遍历每一行。变量x 代表每一行。因此,我们告诉 R 根据第 7 列和第 8 列对每一行进行子集化,然后计算平均值。

    【讨论】:

    • 无法使用rowMeans
    • 我想不出任何快速的东西。 rowMeans 需要一个 data.frame 或一个矩阵来计算均值,这意味着您需要对原始 data.frame 进行子集化(可能带有循环)以在需要的地方构造一个具有正确列和 NA 的新使尺寸正确。我认为apply 会快得多。是性能让您担心吗?
    • 如果您想使用rowMeans,您可以考虑在不在感兴趣范围内时将值设置为 NA。但不确定它会比 LyrandeR 解决方案更快
    • 收到Warning message:argument is not numeric or logical: returning NA后,更新@LyzanderR代码如下:apply(df, 1, function(x) mean(as.numeric(x[x[7]:x[8]], na.rm = TRUE)))
    猜你喜欢
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2017-11-29
    • 2021-05-02
    相关资源
    最近更新 更多