簡體   English   中英

R 計算行平均值,每行的不同列由另一列指示

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

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