【发布时间】:2012-12-13 21:54:15
【问题描述】:
我有一个小的 data.table 代表每个测试单元格的一条记录(AB 测试结果),并且我想添加更多列来比较每个测试单元格与其他测试单元格。换句话说,我要添加的列数将取决于相关 AB 测试中有多少测试单元格。
我的data.table 看起来像:
Group Delta SD.diff
Control 0 0
Cell1 0.00200 0.001096139
Cell2 0.00196 0.001095797
Cell3 0.00210 0.001096992
Cell4 0.00160 0.001092716
我想添加以下列(这里的数字是垃圾):
Group v.Cell1 v.Cell2 v.Cell3 v.Cell4
Control 0.45 0.41 0.45 0.41
Cell1 0.50 0.58 0.48 0.66
Cell2 0.58 0.50 0.58 0.48
Cell3 0.48 0.58 0.50 0.70
Cell4 0.66 0.48 0.70 0.50
我确信do.call 是要走的路,但我不知道如何将一个 do.call 嵌入到另一个内部以生成脚本...而且我不知道如何执行脚本(共 20 行)。我目前最接近的是:
a <- do.call("paste",c("test.1.results <- mutate(test.1.results, P.Better.",list(unlist(test.1.results[,Group]))," = pnorm(Delta, test.1.results['",list(unlist(test.1.results[,Group])),"'][,Delta], SD.diff,lower.tail=TRUE))", sep=""))
这会产生 5 个脚本行,例如:
test.1.results <- mutate(test.1.results, P.Better.Cell2 = pnorm(Delta, test.1.results['Cell2'][,Delta], SD.diff,lower.tail=TRUE))
仅将一个测试单元格结果与其自身进行比较.. 0.50 的结果(由于偶然性而导致的差异)。没有什么用,因为我需要将每个测试相互比较。
不知道该去哪里。
【问题讨论】:
-
鉴于您使用包 data.table 为什么使用
mutate?这没有使用 data.table 的任何功能。 -
我在强迫自己学习data.table,在这种情况下它并不理想,但它在大多数时候表现得像一个数据框。如果我需要回到可信赖的数据框,我会
-
@AndrewDempsey 在这种情况下包含形容词可信赖不太可能让我站在一边并有动力提供帮助,顺便说一句。
-
"trustworthy" 在我更熟悉 data.frames 的上下文中。我对 data.table 的总暴露是我现在正在编写的代码,因为我弄清楚了 data.table 的过滤、选择和分组的语法,所以需要更长的时间。项目截止日期意味着我可能选择了错误的时间来玩 data.table,因为速度并不是真正的问题
-
那是错误的词。好像你的意思很熟悉。是的,听起来现在是学习 data.table 的错误时机,尤其是在您并不真正需要它的情况下。
标签: r data.table plyr