【问题标题】:R how to calculate difference between two matrix rows?R如何计算两个矩阵行之间的差异?
【发布时间】:2018-03-30 18:30:23
【问题描述】:

这似乎是一个基本问题,但我找不到适合我的解决方案。我有一个矩阵results.m

> head(results.m)
Perplexity Topics
[1,] 550.8307 2
[2,] 479.3954 3
[3,] 424.5563 4
[4,] 359.7448 5
[5,] 339.7989 6
[6,] 314.3516 7

我不明白如何创建一个列 diff 将等于两行之间的差异(例如,对于第 2 行,该值将是 -71.4353,在第 1 行中为空)和一列 @987654331 @ 这将等于两行之间的百分比变化(第 2 行为 13)。

> data.frame(diff(as.matrix(results.m)))game me an error

Error in r[i1, , drop = FALSE] - r[-nrow(r):-(nrow(r) - lag + 1L), , drop = FALSE] :   non-numeric argument to binary operator

> tail(results.m, -1) - head(results.m, -1)也报错了

 Error in tail(results.m, -1) - head(results.m, -1) :    non-numeric
 argument to binary operator

这里做错了什么?

【问题讨论】:

  • 可能是apply(results.m, 2, diff)。
  • @RuiBarradas 我在这样做时遇到错误> apply(results.m, 2, diff) Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : non-numeric argument to binary operator
  • 两列都是数字吗?似乎其中一个是factor。也许diff(results.m[, 1]).
  • @RuiBarradas 看来我有一个列表而不是矩阵,并且按照@Michriko 的建议,我已经能够创建diff 列。感谢您的帮助!

标签: r matrix row difference


【解决方案1】:

您可以通过 cbind 将列添加到现有矩阵。 所以你只需要 cbind 其他两列之间的差异

results.m = cbind(results.m, c(0,diff(results.m[,1])))

之后,如果您愿意,可以为该列指定一个适当的名称。

colnames(results.m)[3] <- "diff"

【讨论】:

  • @MKR 确实是这样,但我不明白你为什么要怪我,如果你在我之后回答了这个问题?
  • 对不起。我是认真的。当我添加答案时,我的窗口可能有一段时间没有刷新。我意识到你已经在我之前回答了。让我在我的回答中添加您的参考。
  • 好的没问题 :) 但请记住,问题是关于矩阵而不是数据帧
  • 感谢您的建议,但是第一行没有用,我收到错误&gt; results.m = cbind(results.m, c(0,diff(results.m[,1]))) Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : non-numeric argument to binary operator
  • @Michael Ko 输出为&gt; str(results.m) List of 38 $ : num 551 $ : num 479 $ : num 425 $ : num 360 $ : num 340 $ : num 314 $ : num 305 $ : num 293 $ : num 282 $ : num 271 $ : num 262 $ : num 254 $ : num 245 $ : num 240 $ : num 235 $ : num 225 $ : num 222 $ : num 216 $ : num 213 $ : int 2 .... $ : int 20 - attr(*, "dim")= int [1:2] 19 2 - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr [1:2] "Perplexity" "Topics"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多