【发布时间】:2019-07-26 17:01:15
【问题描述】:
我有一些简单的数据表代码 - 它(几乎)完美运行,但我确信它可以改进。
我在网上搜索过,但找不到这种情况的解决方案。
这是我的代码:
library(data.table)
df <- read.csv(file="data.csv", header = TRUE, stringsAsFactors = FALSE)
x <- df[Question.Number==9, .(sum(LoadedCount)), keyby = .(Provider)]
y <- df[Question.Number==9 & Response!='no experience', .(sum(Count)), keyby = .(Provider)]
z <- list(x$Provider, x$V1/y$V1)
setDT(z)
a <- z[, .(Provider = V1, TotalAverage = V2), keyby=.(TotalAverage = V2)]
a
结果是
TotalAverage Provider TotalAverage
1: 0.7312500 A 0.7312500
2: 0.7334416 B 0.7334416
3: 0.7451613 C 0.7451613
4: 0.7823718 D 0.7823718
5: 0.7904412 E 0.7904412
6: 0.8151316 F 0.8151316
7: 0.8172840 G 0.8172840
8: 0.8327586 H 0.8327586
9: 0.8363333 I 0.8363333
10: 0.8893939 J 0.8893939
问题: 我可以在一排或更有效地做 x/y 吗? 如果我确实需要步骤 z,如何直接将其制作为表格(没有 List 和 setDT)? 如何在不重复该列的情况下按 TotalAverage 对步骤“a”进行排序?
非常感谢!
【问题讨论】:
-
我可以建议您在问题标题中更具体吗?
-
您应该提供示例数据。另外,不要使用
read.csv,而是使用fread。
标签: r data.table