出于某种原因,这个操作似乎显示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) 我试图使用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) 我想要计算向量中的唯一元素的数量,但不包括NA元素.
基本上,我想使用类似于length(unique(x))na.rm = TRUE参数的东西,所以如果我length(unique(c(1,2,3,NA,2)))将返回3
我尝试过data.table,uniqueN但这也没有这个选项.有没有快速简便的方法来做到这一点,而不是必须对列进行两个单独的操作?
我使用 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)
任何想法为什么会发生这种情况?
我希望对 pandas groupby 数据框进行一些聚合,其中我需要在多个列上应用多个不同的自定义函数。此操作在 R 中非常简单且常见(使用data.table或dplyr),但令我惊讶的是我发现它在 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)
我想计算统计量,但也想计算每组中的样本大小,这看起来应该是一两行解决方案,但有时我还需要在分组数据框的多个列上应用多个函数。
我正在寻找一些方法来迭代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)
有没有更优雅的方式来做到这一点?我假设这种类型的操作在其他代码中经常进行.
在两个向量可能缺少值的情况下,如何制作一个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) 我希望转换一个数据帧(或数据表),如
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行到列表,返回不同形状的对象(我认为它只是一个普通列表,每行作为列表中的项,而不是列表的向量)
我正在尝试构建一个允许实例指向另一个类的类,但我希望这些类最终形成一个循环(例如实例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部分参数,而不必重新定义部分函数本身?
例如,我希望能够重置下面的累加器:
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]但这一次,我得到一个空列表.有没有办法维护定义的函数和外部作用域中的变量之间的连接?
我发现有关 vars() 函数的文档有点神秘:https : //docs.python.org/3/library/functions.html#vars
拥有这个功能的意义何在?为什么你会不只是打电话x.__dict__,而不是vars(x)或locals()直接?
有人会给出该功能的用例吗?
与之前提出的这个问题类似,是否有一种简单的方法可以通过 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)