我的桌子看起来像这样:
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)
}
有什么想法吗?
答案 0 :(得分: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)))
答案 1 :(得分:0)
你可以试试这个而不用循环
z=names(table1)
table3 = table1[z]-table2[z]