小编All*_*ang的帖子

分配列时,data.table速度较慢

出于某种原因,这个操作似乎显示data.table分配一个新列大约是基数R的一半.这是有原因的吗?

require(microbenchmark)
require(data.table)
DT = data.table(a = runif(1000000), b = rnorm(1000000))
DF = data.frame(a = runif(1000000), b = rnorm(1000000))

microbenchmark(
  DT[,keycol := seq(1,nrow(DT))],
  DF$keycol <- seq(1,nrow(DF)),
times = 2)

Unit: microseconds
expr                                   min      lq      mean    median    uq     max     neval
 DT[, `:=`(keycol, seq(1, nrow(DT)))] 901.109 901.109 921.1220 921.1220 941.135 941.135     2
 DF$keycol <- seq(1, nrow(DF))        487.844 487.844 527.1865 527.1865 566.529 566.529     2
Run Code Online (Sandbox Code Playgroud)

这是我的R版本,使用data.table版本1.10.4:

> version
           _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          3.3                         
year …
Run Code Online (Sandbox Code Playgroud)

r data.table

9
推荐指数
1
解决办法
412
查看次数

data.table和pmin与na.rm = TRUE参数

我试图使用pmin函数和data.table计算跨行的最小值(类似于post. -row操作和data.table中的更新)但使用类似with=FALSE语法的列的字符列表,以及该na.rm=TRUE说法.

DT <- data.table(x = c(1,1,2,3,4,1,9), 
                 y = c(2,4,1,2,5,6,6),
                 z = c(3,5,1,7,4,5,3),
                 a = c(1,3,NA,3,5,NA,2))

> DT
   x y z  a
1: 1 2 3  1
2: 1 4 5  3
3: 2 1 1 NA
4: 3 2 7  3
5: 4 5 4  5
6: 1 6 5 NA
7: 9 6 3  2
Run Code Online (Sandbox Code Playgroud)

我可以直接使用列来计算行间的最小值:

DT[,min_val := pmin(x,y,z,a,na.rm=TRUE)]
Run Code Online (Sandbox Code Playgroud)

> DT
   x y z  a min_val
1: 1 2 3  1       1 …
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
1
解决办法
838
查看次数

r中不包括NA的唯一元素的数量

我想要计算向量中的唯一元素的数量,但不包括NA元素.

基本上,我想使用类似于length(unique(x))na.rm = TRUE参数的东西,所以如果我length(unique(c(1,2,3,NA,2)))将返回3

我尝试过data.table,uniqueN但这也没有这个选项.有没有快速简便的方法来做到这一点,而不是必须对列进行两个单独的操作?

r

5
推荐指数
2
解决办法
3801
查看次数

swift repl 在 linux 的 windows 子系统中不起作用

我使用 swift 网站上的说明在 Windows (WSSL) 上为 Ubuntu 18.04 安装了 Swift:https ://swift.org/download/#using-downloads

似乎它正在识别版本,但是当我键入swift进入REPL时,它似乎卡住了,我无法退出shell而不退出终端:

allen@LAPTOP-C6O7O7KR:~$ swift --version
Swift version 5.0.1 (swift-5.0.1-RELEASE)
Target: x86_64-unknown-linux-gnu
allen@LAPTOP-C6O7O7KR:~$ swift
let x = 5;
print(x)
;
exit
^C

:q
:q
exit
^C
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会发生这种情况?

swift windows-subsystem-for-linux ubuntu-18.04

5
推荐指数
1
解决办法
469
查看次数

pandas group by,在输入列上使用多个 agg 函数进行聚合

我希望对 pandas groupby 数据框进行一些聚合,其中我需要在多个列上应用多个不同的自定义函数。此操作在 R 中非常简单且常见(使用data.tabledplyr),但令我惊讶的是我发现它在 pandas 中如此困难:

import pandas as pd
data = pd.DataFrame({'A':[1,2,3,4,5,6],'B':[2,4,6,8,10,12],'C':[1,1,1,2,2,2]})

#These work
data.groupby('C').apply(lambda x: x.A.mean() - x.B.mean())
data.groupby('C').agg(['mean','std'])

#but this doesn't
data.groupby('C').agg([lambda x: x.A.mean() - x.B.mean(),
                       lambda x: len(x.A)])
Run Code Online (Sandbox Code Playgroud)

我想计算统计量,但也想计算每组中的样本大小,这看起来应该是一两行解决方案,但有时我还需要在分组数据框的多个列上应用多个函数。

python r pandas

4
推荐指数
1
解决办法
6357
查看次数

优雅的方式循环块与剩余的r?

我正在寻找一些方法来迭代R中的块,但是现在我必须在末尾添加一个额外的语句来捕获余数,如果项目的数量没有均匀地划分为chunksize.例如:

for (i in 1:(nrow(dataframe)/chunksize)){
  (do something with chunk)
}

remainder <- nrow(dataframe) %% chunksize
(do something with dataframe[(length(dataframe)-remainder):length(dataframe),])
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?我假设这种类型的操作在其他代码中经常进行.

r

3
推荐指数
2
解决办法
1300
查看次数

数值缺失的numpy点积

在两个向量可能缺少值的情况下,如何制作一个numpy点积?这似乎需要许多其他步骤,有没有更简单的方法?

v1 = np.array([1,4,2,np.nan,3])
v2 = np.array([np.nan,np.nan,2,4,1])
np.where(np.isnan(v1),0,v1).dot(np.where(np.isnan(v2),0,v2))
Run Code Online (Sandbox Code Playgroud)

numpy

3
推荐指数
1
解决办法
3066
查看次数

如何将多个列转换为r中的类型列的列?

我希望转换一个数据帧(或数据表),如

dt <- data.table(a = c(1,2,4), b = c(NA,3,5), d = c(NA,8,NA))
Run Code Online (Sandbox Code Playgroud)

进入具有一列的东西,例如

dt <- data.table(combined = list(list(1,NA,NA),list(2,3,8),list(4,5,NA))
Run Code Online (Sandbox Code Playgroud)

以下工作均不属于:

dt[,combined := as.list(a,b,d)]
dt[,combined := do.call(list,list(a,b,d))]
dt[,combined := cbind(a,b,d)]
dt[,combined := lapply(list(a,b,d),list)]
Run Code Online (Sandbox Code Playgroud)

请注意,这与此处的问题不同,data.frame行到列表,返回不同形状的对象(我认为它只是一个普通列表,每行作为列表中的项,而不是列表的向量)

r data.table

1
推荐指数
1
解决办法
811
查看次数

在类实例之间创建循环引用?

我正在尝试构建一个允许实例指向另一个类的类,但我希望这些类最终形成一个循环(例如实例A→实例B→实例C→实例A)

我试过以下,但我得到了NameError:

class CyclicClass:
    def __init__(self, name, next_item):
        self.name = name
        self.next_item = next_item

    def print_next(self):
        print(self.next_item)

item_a = CyclicClass("Item A", item_b)
item_b = CyclicClass("Item B", item_a)
Run Code Online (Sandbox Code Playgroud)

这在Python中是不合适的模式吗?如果是这样,实现这个的正确方法是什么?这似乎与以下类似,但不一样,因为类定义本身不是循环的:python类之间的循环依赖

python

1
推荐指数
1
解决办法
73
查看次数

python:重置部分函数参数

有没有办法重置python部分参数,而不必重新定义部分函数本身?

例如,我希望能够重置下面的累加器:

accum = []
def accumulator(list, item):
    list.append(item)

a = partial(accumulator, accum)
a(5)
a(7)
accum
Run Code Online (Sandbox Code Playgroud)

[5, 7]按预期打印.现在我想将列表重置为空,但保持定义的行为a:

accum = []
a(8)
accum
Run Code Online (Sandbox Code Playgroud)

我希望,[8]但这一次,我得到一个空列表.有没有办法维护定义的函数和外部作用域中的变量之间的连接?

python

1
推荐指数
1
解决办法
267
查看次数

python 内置 vars() 函数的目的是什么?

我发现有关 vars() 函数的文档有点神秘:https : //docs.python.org/3/library/functions.html#vars

拥有这个功能的意义何在?为什么你会不只是打电话x.__dict__,而不是vars(x)locals()直接?

有人会给出该功能的用例吗?

python

1
推荐指数
1
解决办法
683
查看次数

lodash - 按键计算两个对象的总和

与之前提出的这个问题类似,是否有一种简单的方法可以通过 Lodash 中的键来对两个对象或一组对象求和?

{ a:12, b:8, c:17 }
Run Code Online (Sandbox Code Playgroud)

{ a:2, b:3, c:1 }
Run Code Online (Sandbox Code Playgroud)

应该给

{ a:14, b:11, c:18 }
Run Code Online (Sandbox Code Playgroud)

lodash

0
推荐指数
1
解决办法
2310
查看次数