R元素明智地减去矩阵

时间:2015-04-28 18:40:34

标签: r matrix

我有两个不同长度的1列矩阵。两个矩阵都有共同的行名和其他每个行唯一的行名(并且可能不是相同的顺序)。如何减去两者,确保每个公共元素相互减去?例如:

> mat1
  [,1]
a    1
b    2
c    3
d    4
e    5
f    6

> mat2
  [,1]
x    1
a    2
y    3
b    4

> mat3
  [,1]
a    -1
b    -2
c    3
d    4
e    5
f    6
x    -1
y    -3

where mat3 <- mat1 - mat2

2 个答案:

答案 0 :(得分:4)

试试这个:

TypeError: incompatible type [object] for a datetime/timedelta operation

答案 1 :(得分:1)

我的建议是避免使用rownames。 Rownames很难管理,因为一个变量(rowname)的处理方式与其他变量不同。这违反了tidy data的原则。

我会使用library(dplyr) 将rownames转换为数据集中的变量:

mat1 <- matrix(1:6, ncol = 1, dimnames = list(letters[1:6]))
mat2 <- matrix(1:4, ncol = 1, dimnames = list(c("x", "a", "y", "b")))

数据

d1 <- add_rownames(data.frame(mat1), var = "name")
d2 <- add_rownames(data.frame(mat2), var = "name")

转换为data.frame并生成变量:

d <- merge(d1, d2, by = "name", all = TRUE)

d %>%
  rowwise() %>%
  mutate(result = sum(mat1, -mat2, na.rm = TRUE))

合并并计算结果:

{{1}}