假设我有这个数据框:
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)
, etc.
在我的上下文中,对角线具有相同的含义:
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
例如,D
is 5+5+4+14
您可以使用row()
and 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()
工作正常...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)