- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
鉴于data.table如下:
library(data.table)
set.seed(100)
dt <- data.table(a=c(1:3, 1), b = c(1,0,1, 3), c = c(1,2,1,3), x = rnorm(4), y = rnorm(4), d = c(4, 6, 6, 7))
dt
返回,
a b c x y d
1: 1 1 1 -0.50219235 0.1169713 4
2: 2 0 2 0.13153117 0.3186301 6
3: 3 1 1 -0.07891709 -0.5817907 6
4: 1 3 3 0.88678481 0.7145327 7
dt
通过使用列的名称(“a”、“b”、“c”和“d”)
a b c x y d
1: FALSE FALSE FALSE -0.50219235 0.1169713 FALSE
2: FALSE FALSE FALSE 0.13153117 0.3186301 TRUE
3: TRUE FALSE FALSE -0.07891709 -0.5817907 TRUE
4: FALSE TRUE TRUE 0.88678481 0.7145327 FALSE
最佳答案
我想出的方法如下所示:
dt[, c("a", "b", "c") := lapply(.SD, `==`, 3),
.SDcols = c("a", "b", "c")][, d := (d == 6)][]
# a b c x y d
# 1: FALSE FALSE FALSE -0.50219235 0.1169713 FALSE
# 2: FALSE FALSE FALSE 0.13153117 0.3186301 TRUE
# 3: TRUE FALSE FALSE -0.07891709 -0.5817907 TRUE
# 4: FALSE TRUE TRUE 0.88678481 0.7145327 FALSE
library(data.table)
set.seed(100)
Nrow = 3000000
dt <- data.table(a = sample(10, Nrow, TRUE),
b = sample(10, Nrow, TRUE),
c = sample(10, Nrow, TRUE),
x = rnorm(Nrow),
y = rnorm(Nrow),
d = sample(10, Nrow, TRUE))
fun1 <- function(indt) {
indt[, c("a", "b", "c") := lapply(.SD, `==`, 3),
.SDcols = c("a", "b", "c")][, d := (d == 6)][]
}
fun2 <- function(indt) {
for (i in c("a","b","c")) indt[, (i):=get(i)==3]
for (i in c("d")) indt[, (i):=get(i)==6]
indt
}
fun3 <- function(indt) {
f <- function(col,x) indt[,(col):=(.SD==x),.SDcols=col]
lapply(list("a","b","c"), f, 3)
lapply(list("d"), f, 6)
indt
}
microbenchmark(fun1(copy(dt)), fun2(copy(dt)), fun3(copy(dt)), times = 10)
# Unit: milliseconds
# expr min lq median uq max neval
# fun1(copy(dt)) 518.6034 535.0848 550.3178 643.2968 695.5819 10
# fun2(copy(dt)) 830.5808 1037.8790 1172.6684 1272.6236 1608.9753 10
# fun3(copy(dt)) 922.6474 1029.8510 1097.7520 1145.1848 1340.2009 10
identical(fun1(copy(dt)), fun2(copy(dt)))
# [1] TRUE
identical(fun2(copy(dt)), fun3(copy(dt)))
# [1] TRUE
fun4
但在这个大小(3e6行,90MB)上它只是一个smidgen最快
fun4 <- function(indt) {
for (i in c("a","b","c")) set(indt,NULL,i,indt[[i]]==3)
for (i in c("d")) set(indt,NULL,i,indt[[i]]==6)
indt
}
microbenchmark(copy(dt), fun1(copy(dt)), fun2(copy(dt)), fun3(copy(dt)),
fun4(copy(dt)), times = 10)
# Unit: milliseconds
# expr min lq median uq max neval
# copy(dt) 64.13398 65.94222 68.32217 82.39942 110.3293 10
# fun1(copy(dt)) 601.84611 618.69288 690.47179 713.56760 766.1534 10
# fun2(copy(dt)) 887.99727 950.33821 978.98988 1071.31253 1180.1281 10
# fun3(copy(dt)) 1566.90858 1574.30635 1603.55467 1673.38625 1771.4054 10
# fun4(copy(dt)) 566.43528 568.91103 575.06881 672.44021 692.9839 10
> identical(fun1(copy(dt)), fun4(copy(dt)))
[1] TRUE
set.seed(100)
Nrow = 30000000
dt <- data.table(a = sample(10, Nrow, TRUE),
b = sample(10, Nrow, TRUE),
c = sample(10, Nrow, TRUE),
x = rnorm(Nrow),
y = rnorm(Nrow),
d = sample(10, Nrow, TRUE))
object.size(dt)/1024^2
# 915 MB
microbenchmark(copy(dt),fun1(copy(dt)), fun2(copy(dt)), fun3(copy(dt)),
fun4(copy(dt)), times = 3)
# Unit: seconds
# expr min lq median uq max neval
# copy(dt) 8.04262 53.68556 99.32849 269.4414 439.5544 3
# fun1(copy(dt)) 207.70646 260.16710 312.62775 317.8966 323.1654 3
# fun2(copy(dt)) 421.78934 502.03503 582.28073 658.0680 733.8553 3
# fun3(copy(dt)) 104.30914 187.49875 270.68836 384.7804 498.8724 3
# fun4(copy(dt)) 158.17239 165.35898 172.54557 183.4851 194.4246 3
fun4
我猜,由于
for
的内存效率,平均速度要快很多。一次循环一列。在
fun1
和
fun3
,
:=
的RHS在将其分配给三个目标列之前是三列宽。话虽如此,为什么我以前的
fun2
最慢呢?毕竟它是逐列进行的。也许
get()
在进入
==
之前复制该列.
fun3
是最快的(104 对 158)。我不确定我是否信任
microbenchmark
在那。我似乎记得 Radford Neal 对
microbenchmark
的一些批评,但不记得结果。
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: AuthenticAMD
CPU family: 20
Model: 2
Stepping: 0
CPU MHz: 800.000
BogoMIPS: 1995.06
Virtualisation: AMD-V
L1d cache: 32K
L1i cache: 32K
L2 cache: 512K
NUMA node0 CPU(s): 0,1
> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-pc-linux-gnu (64-bit)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] microbenchmark_1.3-0 data.table_1.9.2 bit64_0.9-3 bit_1.1-11
关于r - 如何使用不同条件评估 data.table 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666871/
我有 table 像这样 -------------------------------------------- id size title priority
我的应用在不同的 Activity (4 个 Activity )中仅包含横幅广告。所以我的疑问是, 我可以对所有横幅广告使用一个广告单元 ID 吗? 或者 每个 Activity 使用不同的广告单元
我有任意(但统一)数字列表的任意列表。 (它们是 n 空间中 bin 的边界坐标,我想绘制其角,但这并不重要。)我想生成所有可能组合的列表。所以:[[1,2], [3,4],[5,6]] 产生 [[1
我刚刚在学校开始学习 Java,正在尝试自定义控件和图形。我目前正在研究图案锁,一开始一切都很好,但突然间它绘制不正确。我确实更改了一些代码,但是当我看到错误时,我立即将其更改回来(撤消,ftw),但
在获取 Distinct 的 Count 时,我在使用 Group By With Rollup 时遇到了一个小问题。 问题是 Rollup 摘要只是所有分组中 Distinct 值的总数,而不是所有
这不起作用: select count(distinct colA, colB) from mytable 我知道我可以通过双选来简单地解决这个问题。 select count(*) from (
这个问题在这里已经有了答案: JavaScript regex whitespace characters (5 个回答) 2年前关闭。 你能解释一下为什么我会得到 false比较 text ===
这个问题已经有答案了: 奥 git _a (56 个回答) 已关闭 9 年前。 我被要求用 Javascript 编写一个函数 sortByFoo 来正确响应此测试: // Does not cras
所以,我不得不说,SQL 是迄今为止我作为开发人员最薄弱的一面。也许我想要完成的事情很简单。我有这样的东西(这不是真正的模型,但为了使其易于理解而不浪费太多时间解释它,我想出了一个完全模仿我必须使用的
这个问题在这里已经有了答案: How does the "this" keyword work? (22 个回答) 3年前关闭。 简而言之:为什么在使用 Objects 时,直接调用的函数和通过引用传
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: what is the difference between (.) dot operator and (-
我真的不明白这里发生了什么但是: 当我这样做时: colorIndex += len - stopPos; for(int m = 0; m < len - stopPos; m++) { c
思考 MySQL 中的 Group By 函数的最佳方式是什么? 我正在编写一个 MySQL 查询,通过 ODBC 连接在 Excel 的数据透视表中提取数据,以便用户可以轻松访问数据。 例如,我有:
我想要的SQL是这样的: SELECT week_no, type, SELECT count(distinct user_id) FROM group WHERE pts > 0 FROM bas
商店表: +--+-------+--------+ |id|name |date | +--+-------+--------+ |1 |x |Ma
对于 chrome 和 ff,当涉及到可怕的 ie 时,这个脚本工作完美。有问题 function getY(oElement) { var curtop = 0; if (oElem
我现在无法提供代码,因为我目前正在脑海中研究这个想法并在互联网上四处乱逛。 我了解了进程间通信和使用共享内存在进程之间共享数据(特别是结构)。 但是,在对保存在不同 .c 文件中的程序使用 fork(
我想在用户集合中使用不同的功能。在 mongo shell 中,我可以像下面这样使用: db.users.distinct("name"); 其中名称是用于区分的集合字段。 同样我想要,在 C
List nastava_izvjestaj = new List(); var data_context = new DataEvidencijaDataContext();
我的 Rails 应用程序中有 Ransack 搜索和 Foundation,本地 css 渲染正常,而生产中的同一个应用程序有一个怪癖: 应用程序中的其他内容完全相同。 我在 Chrome 和 Sa
我是一名优秀的程序员,十分优秀!