【问题标题】:Calculate pair-wise ratios between columns计算列之间的成对比率
【发布时间】:2014-10-01 19:42:02
【问题描述】:
         A    B     C     D    E     F
 [1,]  187  174   183   115  101   104
 [2,]  451  166   177   842  101   133
 [3,]  727  171   187 12803   98   134
 [4,] 1532  181   196   730   98   108
 [5,] 4139  188   214 20358  105   159
 [6,]  689  185   211  1633  110   162
 [7,] 1625  184   195  2283  109   114
 [8,]  771  181   190   904  105   110
 [9,]  950  177   190  1033  106   112
[10,]  703  180   191   463  106   110
[11,] 2052  178   188  2585  100   105
[12,] 1161  178   187  2874   99   110
[13,]  214  175   184   173   98   110
[14,]  473  184   191   971  104   111
[15,]  756  185   193 14743  107   114

我有一个类似于上述数据的数据集。 如何生成一个矩阵,其所有比率都是根据下一列和前一列之间的数字计算得出的?

       B/A      C/B       D/C      E/D      F/E 
 [1,]  174/187  183/174   115/183  101/115  104/101
 [2,]  
 [3,]  
 [4,] 
 [5,]
 [6,]  
 ...

【问题讨论】:

  • 由于它是空白的,我不太清楚您希望输出看起来像什么,但是x[,-1] / x[,-ncol(x)](其中x 是您的矩阵的名称)是否给了您想要的东西?这会将除第一列之外的所有列除以除最后一列之外的所有列。
  • @ping 因为我所有的变量都是数值。我想获得一个新的数据框,其中计算了相邻列之间的比率。例如,在新数据框中,第 1 列是旧数据集中 ColB/ColA 的比率,第 2 列是 ColC/ColB 的比率...
  • 您是否尝试过第一条评论中的建议?我确信这就是您所要求的。

标签: r matrix


【解决方案1】:

根据 ping 的建议,但针对数据框列子集进行了调整(意味着我所做的只是去掉逗号)。

new <- df[-1] / df[-length(df)]
colnames(new) <- paste(names(df)[-1], names(df)[-length(df)], sep = "/")
head(new)
#           B/A      C/B        D/C         E/D      F/E
# 1  0.93048128 1.051724  0.6284153 0.878260870 1.029703
# 2  0.36807095 1.066265  4.7570621 0.119952494 1.316832
# 3  0.23521320 1.093567 68.4652406 0.007654456 1.367347
# 4  0.11814621 1.082873  3.7244898 0.134246575 1.102041
# 5  0.04542160 1.138298 95.1308411 0.005157678 1.514286
# 6  0.26850508 1.140541  7.7393365 0.067360686 1.472727

如果您可能想对数据应用多个函数,您也可以这样做

Fun <- function(...) list(...) 
Fun(`/`)[[1]](df[-1], df[-length(df)])

【讨论】:

  • 按照 cmets 的建议,你也可以使用这个单行:df[,-1] / df[,-ncol(df)]
  • @digEmAll - 是的,但是他们想出了很棒的 col 名称算法吗? paste(names(df)[-1], names(df)[-length(df)], sep = "/")哦等等,都是一样的。哈哈
  • 如果我的数据集 df 中的所有这些数字变量旁边都有一个时间戳列(第 1 列)怎么办?如何计算第 2 列的比率,即 B/A 实际上来自第 3 列除以第 2 列?
猜你喜欢
  • 2016-09-11
  • 2017-02-25
  • 2023-03-27
  • 2020-04-25
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多