簡體   English   中英

查找不同列中不同行的總和

[英]Finding sums of different rows in different columns

我試圖找到不同列中不同行的總和。 例如,在下面的虛構數據中,我想知道 exp1 的第 3-5 行、exp2 的 6-8 行和 exp3 的 2-4 行的總和,每列分別返回 12、51、69。

 > data
   exp1 exp2 exp3
1     1   11   21
2     2   12   22
3     3   13   23
4     4   14   24
5     5   15   25
6     6   16   26
7     7   17   27
8     8   18   28
9     9   19   29
10   10   20   30

我有我想要的行索引范圍作為兩個單獨的命名數字對象,因為我接下來要做什么,所以比我預期的行索引小一個值。

> upper
exp1 exp2 exp3 
   5    8    4 
> lower
exp1 exp2 exp3 
   2    5    1 

我嘗試的是用循環切出第1:upper和第1:lower

output <- list()
for (i in 1:length(data)) {
  temp <- data[i]
  output[[i]] <- slice(temp, 1:upper[i])
}

這會創建兩個新的數據框,讓我可以找到它們的colSums ,然后從 1:upper 中減去 1:lower。 所以我確實設法為每一列得到了一個總和,但即使對於 R 的新手來說,這似乎是一種非常復雜的做事方式,所以我想知道是否有更清潔的方法來實現相同的結果。

任何建議將不勝感激,謝謝!

您可以使用mapply

mapply(function(x, y, z) sum(z[x:y]), lower + 1, upper, data)

#exp1 exp2 exp3 
#  12   51   69 

數據

data <- structure(list(exp1 = 1:10, exp2 = 11:20, exp3 = 21:30), 
class = "data.frame", row.names = c(NA, -10L))
upper <- c('exp1' = 5, 'exp2' = 8, 'exp3' = 4)
lower <- c('exp1' = 2, 'exp2' = 5, 'exp3' = 1)

使用pmap

library(purrr)
pmap_dbl(list(data, lower+1, upper), ~ sum(..1[..2:..3]))
# exp1 exp2 exp3 
#  12   51   69 

數據

data <- structure(list(exp1 = 1:10, exp2 = 11:20, exp3 = 21:30), 
class = "data.frame", row.names = c(NA, -10L))
upper <- c('exp1' = 5, 'exp2' = 8, 'exp3' = 4)
lower <- c('exp1' = 2, 'exp2' = 5, 'exp3' = 1)

暫無
暫無

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

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