[英]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.