gpt4 book ai didi

r - 如何对数据框的对角线求和

转载 作者:行者123 更新时间:2023-12-04 02:34:32 27 4
gpt4 key购买 nike

说我有这个数据框:

     1   2   3   4      
100 8 12 5 14
99 1 6 4 3
98 2 5 4 11
97 5 3 7 2

在上面的数据框中,这些值表示对 (100, 1), (99, 1) 进行的观察次数的计数。 , 等等。

在我的上下文中,对角线具有相同的含义:
     1   2   3   4
100 A B C D
99 B C D E
98 C D E F
97 D E F G

我将如何对第一个数据框中的对角线求和(即,对相似字母的计数求和)?

这将产生:
group  sum
A 8
B 13
C 13
D 28
E 10
F 18
G 2

例如, D5+5+4+14

最佳答案

您可以使用 row()col()识别行/列关系。

m <- read.table(text="
1 2 3 4
100 8 12 5 14
99 1 6 4 3
98 2 5 4 11
97 5 3 7 2")

vals <- sapply(2:8,
function(j) sum(m[row(m)+col(m)==j]))

或(如 ?@thelatemail 在评论中所建议的那样)
vals <- sapply(split(as.matrix(m), row(m) + col(m)), sum)
data.frame(group=LETTERS[seq_along(vals)],sum=vals)

或(@弗兰克)
data.frame(vals = tapply(as.matrix(m), 
(LETTERS[row(m) + col(m)-1]), sum))
as.matrix()需要制作 split()正常工作...

关于r - 如何对数据框的对角线求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com