如何在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