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