如何用R计算矩阵两行间的差值与百分比变化?
嘿,我来帮你搞定这个问题!要给你的results.m矩阵新增差值列(diff)和百分比变化列(chg)其实很简单,用R的基础函数就能轻松实现,具体操作如下:
步骤1:计算diff列(行间差值)
diff列的逻辑是当前行的Perplexity减去上一行的Perplexity,第一行因为没有上一行,所以留空(用NA表示)。我们可以用diff()函数直接计算行间差值,再给结果开头补一个NA来匹配原矩阵的行数:
# 提取Perplexity列的行间差值,开头补NA diff_vals <- c(NA, diff(results.m[, "Perplexity"]))
步骤2:计算chg列(百分比变化)
百分比变化的公式是(当前行Perplexity - 上一行Perplexity) / 上一行Perplexity * 100,同样第一行设为NA。这里我们可以利用刚才算好的diff值,结合去掉最后一行的Perplexity数据来计算:
# 计算百分比变化,开头补NA chg_vals <- c(NA, diff_vals[-1] / results.m[-nrow(results.m), "Perplexity"] * 100)
(或者直接用diff(results.m[, "Perplexity"])代替diff_vals[-1],效果完全一致)
步骤3:把新列添加到原矩阵
用cbind()函数把原矩阵和新计算的两列合并,记得给新列命名:
# 合并矩阵与新列 results.m <- cbind(results.m, diff = diff_vals, chg = chg_vals)
看看最终结果
运行完上面的代码后,执行head(results.m)就能看到你想要的效果:
head(results.m)
Perplexity Topics diff chg
[1,] 550.8307 2 NA NA
[2,] 479.3954 3 -71.43530 -12.96864
[3,] 424.5563 4 -54.83910 -11.43923
[4,] 359.7448 5 -64.81150 -15.26567
[5,] 339.7989 6 -19.94590 -5.54443
[6,] 314.3516 7 -25.44730 -7.48908
完全符合你的需求~
内容的提问来源于stack exchange,提问作者Michael

