簡體   English   中英

R中的數據框迭代計算和合並

[英]Dataframe Iterative calculations and merging in R

我有以下示例類型的數據框,其中包含許多行和列。 我需要取前幾行的平均值,並將其添加到R中帶有循環的另一列中。

輸入:

MA1 MA2 MA3 MA4 MA5
4.0 0.2 0.2 0.2 0.2
3.0 4.0 0.2 3.0 0.2
0.2 0.2 0.2 0.2 0.2
0.2 4.0 1.0 0.2 2.0
0.2 0.2 0.2 3.0 0.2
5.0 4.0 0.2 0.2 0.2
0.2 0.2 0.2 3.0 0.2

輸出:

MA1 MA2 MA3 MA4 MA5  MA6 MA7  MA8  MA9  MA10 MA11
4.0 0.2 0.2 0.2 0.2 2.80 2.80 2.80 2.80 2.80 2.80
3.0 4.0 0.2 3.0 0.2 2.09 2.09 2.09 2.09 2.09 2.09
0.2 0.2 0.2 0.2 0.2 0.22 0.22 0.22 0.22 0.22 0.22
0.2 4.0 1.0 0.2 2.0 1.49 1.49 1.49 1.49 1.49 1.49
0.2 0.2 0.2 3.0 0.2 0.78 0.78 0.78 0.78 0.78 0.78
5.0 4.0 0.2 0.2 0.2 1.93 1.93 1.93 1.93 1.93 1.93
0.2 0.2 0.2 3.0 0.2 0.78 0.78 0.78 0.78 0.78 0.78

在這里,MA6應該是MA1到MA5的平均列值,而MA7應該是MA1到MA6的平均列值,依此類推...有人可以幫我解決這個問題嗎

rowMeans不是一個很好的示例,因為您的值在第一次迭代后不會更改,但是請嘗試使用此遞歸函數

您的資料

df <- read.table(text="MA1 MA2 MA3 MA4 MA5
4.0 0.2 0.2 0.2 0.2
3.0 4.0 0.2 3.0 0.2
0.2 0.2 0.2 0.2 0.2
0.2 4.0 1.0 0.2 2.0
0.2 0.2 0.2 3.0 0.2
5.0 4.0 0.2 0.2 0.2
0.2 0.2 0.2 3.0 0.2", header=TRUE)

遞歸函數

myfun <- function(df, N, counter) {
            require(dplyr)
            if (counter > N) {
                return(df)  # return value once number of iterations is fulfilled
            } else {
                new.df <- df %>% 
                        mutate(new = rowMeans(.)) %>%  # modify data frame
                        rename_at(vars("new"), funs(paste0("MA", ncol(df)+1)))  # rename new column
                myfun(new.df, N, counter+1)  # recursive, calls function again but with modified data frame
            }
         }

myfun(df, N=5, counter=1)

  # MA1 MA2 MA3 MA4 MA5  MA6  MA7  MA8  MA9 MA10
# 1 4.0 0.2 0.2 0.2 0.2 0.96 0.96 0.96 0.96 0.96
# 2 3.0 4.0 0.2 3.0 0.2 2.08 2.08 2.08 2.08 2.08
# 3 0.2 0.2 0.2 0.2 0.2 0.20 0.20 0.20 0.20 0.20
# 4 0.2 4.0 1.0 0.2 2.0 1.48 1.48 1.48 1.48 1.48
# 5 0.2 0.2 0.2 3.0 0.2 0.76 0.76 0.76 0.76 0.76
# 6 5.0 4.0 0.2 0.2 0.2 1.92 1.92 1.92 1.92 1.92
# 7 0.2 0.2 0.2 3.0 0.2 0.76 0.76 0.76 0.76 0.76

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM