【问题标题】:Looping arithmetic calculation between tables表间循环算术计算
【发布时间】:2016-11-17 23:07:02
【问题描述】:

我有一个如下所示的表格:

table1

            Not Visible Visible <NA>
All           0.29       0.50   0.20
Bowtie        0.24       0.17   0.59
Cola          0.15       0.83   0.02
Squig         0.49       0.51   0.49

然后我有 9 个其他类似的表。下面是一个例子:

 table2

          Not Visible Visible <NA>
All           0.28    0.50    0.23
Bowtie        0.11    0.30    0.59
Cola          0.30    0.67    0.03
Squig         0.42    0.51    0.06

我想要table1 - table2 的结果如下,但我还想要表 1 和其他 9 个表。

       Not Visible  Visible  <NA>
All           0.01    0.00 -0.03
Bowtie        0.13   -0.13  0.00
Cola         -0.15    0.16 -0.01
Squig         0.07    0.00  0.43

如果不写Table 1 - table 2; table 1 - table 3; table 1 - table 4 等,我该怎么做? 如果我尝试使用下面的代码循环(例如),我会得到二进制错误的非数字参数:

Tables <- c("table1", "table2") ## as an example

for (r in Tables) {

yy <- paste(r,"res", sep = "-")
  zz <- table1-r
  assign(yy,zz)

}

有什么想法吗?

【问题讨论】:

    标签: r loops math


    【解决方案1】:

    考虑使用表列表(不是其名称的字符串文字),然后使用lapply(),其中结果列表可以保存为单独的表或绑定到数据框:

    # LIST OF TABLES WITH NAMED ELEMENTS (t1 NOT INCLUDED)
    tables <- setNames(list(t2, t3, t4, t5, t6, t7, t8, t9), 
                       c("table2", "table3", "table4", "table5",
                         "table6", "table7", "table8", "table9"))
    
    # ITERATIVELY SUBTRACT FROM t1
    tableList <- lapply(tables, function(x) t1 - x)
    
    # SAVE EACH TABLE AS SEPARATE OBJECTS 
    list2env(tableList, envir=.GlobalEnv)
    
    # DATAFRAME BINDING - WIDE FORMAT (INCLUDING t1)
    df <- as.data.frame(cbind(t1, do.call(cbind, tableList)))
    
    # DATAFRAME BINDING - LONG FORMAT (INCLUDING t1)
    df <- as.data.frame(rbind(t1, do.call(rbind, tableList)))
    

    【讨论】:

    • 谢谢芭菲,说的很全面!
    • 你打赌!很高兴为您提供帮助。
    【解决方案2】:

    你可以在不循环的情况下尝试这个

    z=names(table1)
    
    table3 = table1[z]-table2[z]
    

    【讨论】:

    • 不,这不起作用(在强制as.data.frame之后),给了NA NA NA的向量
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多