如何在R中的矩阵中添加重复值
从这个样本矩阵开始:如何在R中的矩阵中添加重复值,r,R,从这个样本矩阵开始: my.matrix <- cbind(c('a','b','c','a','d','a','e','f','g','h','a'), c(1,1,1,1,2,2,2,2,3,4,4)) my.matrix [,1] [,2] [1,] "a" "1" [2,] "b" "1" [3,] "c" "1" [4,] "a" "1" [5,] "d" "2" [6,] "a" "2" [7,] "e" "2"
my.matrix <- cbind(c('a','b','c','a','d','a','e','f','g','h','a'), c(1,1,1,1,2,2,2,2,3,4,4))
my.matrix
[,1] [,2]
[1,] "a" "1"
[2,] "b" "1"
[3,] "c" "1"
[4,] "a" "1"
[5,] "d" "2"
[6,] "a" "2"
[7,] "e" "2"
[8,] "f" "2"
[9,] "g" "3"
[10,] "h" "4"
[11,] "a" "4"
您可以使用
tapply
:
> tapply(as.numeric(my.matrix[, 2]), my.matrix[, 1], sum)
a b c d e f g h
8 1 1 2 2 2 3 4
注意:在这种情况下,使用数据框而不是矩阵可能更有意义,因为列的类型不同。此外,您的示例答案似乎是错误的
如果你真的想要一个矩阵作为结果,你可以
cbind
上面结果的名称和值。在矩阵中有混合类型的数据不是一个好主意。将内容存储在data.frame中会更容易。然后,您可以使用aggregate
折叠和汇总数据
my.data <- data.frame(
a=c('a','b','c','a','d','a','e','f','g','h','a'),
b=c(1,1,1,1,2,2,2,2,3,4,4)
)
aggregate(b~a, my.data, sum)
除了使用Basic R的其他优秀答案外,还可以考虑使用<代码> DPLYR 包的方法。
library(dplyr)
# Use a data frame rather than a matrix
my.data <- data.frame(x = c('a', 'b', 'c', 'a', 'd', 'a', 'e', 'f', 'g', 'h', 'a'),
y = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4))
my.data %>%
group_by(x) %>%
summarize(count = sum(y))
# x count
# 1 a 8
# 2 b 1
# 3 c 1
# 4 d 2
# 5 e 2
# 6 f 2
# 7 g 3
# 8 h 4
库(dplyr)
#使用数据帧而不是矩阵
my.data%
分组依据(x)%>%
汇总(计数=总和(y))
#x计数
#1 a 8
#2 b 1
#3 c 1
#4D2
#5 e 2
#6f2
#7 g 3
#8小时4
请注意,正如Flick先生所说,当您使用混合数据类型时,应该使用数据帧而不是矩阵
a b
1 a 8
2 b 1
3 c 1
4 d 2
5 e 2
6 f 2
7 g 3
8 h 4
library(dplyr)
# Use a data frame rather than a matrix
my.data <- data.frame(x = c('a', 'b', 'c', 'a', 'd', 'a', 'e', 'f', 'g', 'h', 'a'),
y = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4))
my.data %>%
group_by(x) %>%
summarize(count = sum(y))
# x count
# 1 a 8
# 2 b 1
# 3 c 1
# 4 d 2
# 5 e 2
# 6 f 2
# 7 g 3
# 8 h 4