![](/img/trans.png)
[英]Calculate the average of the value of each row with each successive row in one column in R in loop
[英]R Calculate row average, different columns for each row as indicated by another column
我想計算每一行不同列的行平均值,如另一列所示。 在這個例子dataframe中,列“number”的范圍是1:11,其他12列命名為“block_1”到“block_12”。例如,如果“block”為5,我想計算列的行平均值塊_6 到塊_12。 也就是說,通過block_12,在“number”列中指示的塊號的平均值。 每個 ID 代表一個唯一條目,應保留所有行。 我怎樣才能做到這一點?
n <- 11 ; m <- 11 ; reps <- 12
dff<-as.data.frame(cbind(matrix(sample.int(11, n, replace = TRUE), n, m/n),
replicate(reps, sample(1:9, n, replace = TRUE)/10)))
myFun<- function(n = 5000) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
dff$ID<-myFun(11)
dff<-data.table::setnames(dff, old = c('V1','V2','V3','V4', 'V5','V6','V7','V8','V9','V10', 'V11','V12','V13'), new = c('number','block_1','block_2','block_3','block_4', 'block_5','block_6','block_7','block_8','block_9','block_10', 'block_11','block_12'))
這是一個基本的 R 選項:
cols <- grep('block', names(dff), value = TRUE)
n <- length(cols)
dff$mean_value <- mapply(function(x, y) mean(unlist(dff[x, cols[y:n]])),
seq(nrow(dff)), dff$number + 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.