【发布时间】:2021-07-25 00:40:53
【问题描述】:
我有一个看起来像这样的排名表(由于 netmeta 包中的 netleague 函数)(本示例中的值是为了简化它的外观):
| A | 0.3 (-0.4 to 0.6) | . |
| 0.1 (-0.9 to 0.3) | B | -0.6 (-0.9 to 0.0 |
| 0.2 (-0.8 to 0.4) | 0.3 (-0.6 to 0.1) | C |
下面的三角形代表间接比较(我对此示例感兴趣的那些)并读取列与行。例如,0.1 (-0.9 to 0.3) 是 A vs B。
这些值作为data.frame 存储在R 的环境中list 的元素中。
结果我需要的是:
| char1 | char2 | value1 | value2 | value3 |
|---|---|---|---|---|
| A | B | 0.1 | 0.9 | 0.3 |
| A | C | 0.2 | -0.8 | 0.4 |
| B | A | -0.1 | -0.3 | 0.9 |
| B | C | 0.3 | -0.6 | 0.1 |
| C | A | -0.2 | -0.4 | 0.8 |
| C | B | -0.3 | -0.1 | 0.6 |
请注意,为了获得 B 与 A,我颠倒了这些值。根据结果的性质,我可能会改为使用 1/value。
我试过看at the code behind the netleague function,但揭穿它对我来说是相当先进的。
有人知道如何使用 R 自动执行此任务吗?
到目前为止,我最好的选择是手动执行此操作(耗时超过 8000 个值并且可能引入人为拼写错误)或至少使用 Excel 中的一些公式(仍然很耗时,我必须逐行调整公式)。
可重现格式的数据:(来源:dput(league[["fixed"]][1:4, ]))
structure(list(V1 = c("dalia", "0.08 (-0.9 to 0.26)",
"-0.15 (-0.40 to 0.06)", "0.37 ( 0.00 to 0.78)"), V2 = c("-0.05 (-0.33 to 0.22)",
"camelia", "-0.24 (-0.49 to -0.01)", "0.31 (-0.09 to 0.75)"
), V3 = c("-0.14 (-0.64 to 0.32)", "-0.37 (-0.66 to -0.05)",
"margher", "0.54 ( 0.12 to 0.95)"), V4 = c(".", ".", ".",
"rosa_can"), V5 = c(".", ".", ".", "."), V6 = c(".", ".", ".",
"."), V7 = c(".", ".", ".", "."), V8 = c("0.65 ( 0.54 to 0.87)",
"0.54 ( 0.38 to 0.78)", "0.77 ( 0.2 to 1.28)", "0.29 (-0.08 to 0.67)"
), V9 = c(".", ".", ".", "."), V10 = c(".", ".", ".", "."), V11 = c(".",
".", ".", "."), V12 = c("0.23 (-0.52 to 0.99)", ".", "-0.05 (-0.56 to 0.47)",
"."), V13 = c(".", "0.07 (-0.25 to 0.33)", ".", ".")), row.names = c(NA,
4L), class = "data.frame")
【问题讨论】:
-
您能否提供可重现格式的数据?阅读how to give a reproducible example
-
@RonakShah 我已经更新了原帖 - 谢谢,我不知道
dput(总是很好学习!)。