标签: k

如何用功能性的,基于数组的语言(如K(或Q))表达这种命令性功能?

如何用功能性的,基于数组的语言(如K(或Q))表达这种命令性功能?

在草率的C ++中:

vector<int> x(10), y(10); // Assume these are initialized with some values.

// BTW, 4 is just a const -- it's part of the algorithm and is arbitrarily chosen.

vector<int> result1(x.size() - 4 + 1); // A place to hold a resulting array.
vector<int> result2(x.size() - 4 + 1); // A place to hold another resulting array.

// Here's the code I want to express functionally.
for (int i = 0; i <= x.size() …
Run Code Online (Sandbox Code Playgroud)

functional-programming k kdb

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

帕斯卡的三角形为k/q

斐波那契很好:

  f:|+\
5 f\1 1
Run Code Online (Sandbox Code Playgroud)

但我没有找到帕斯卡三角形的类似表达.这是我能得到的最好的:

q){x+\\x#1}6
1 1 1  1  1   1  
1 2 3  4  5   6  
1 3 6  10 15  21 
1 4 10 20 35  56 
1 5 15 35 70  126
1 6 21 56 126 252
1 7 28 84 210 462
Run Code Online (Sandbox Code Playgroud)

k kdb q-lang

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

[kdb +/q]:将邻接矩阵转换为邻接列表

给定(矩形)邻接矩阵m,如何在q语言中构造邻接表?

在QIdioms wiki中,我找到了k一种语言解决方案,当通过qconsole with k)command 运行时会给出'vs错误:

m:(1 0 1;1 0 1)
k) (^m)_vs &,/m
'vs
Run Code Online (Sandbox Code Playgroud)

结果应该是:

0 0 1 1
0 2 0 2
Run Code Online (Sandbox Code Playgroud)

这是我能够复制的q:

k) &,/m
0 2 3 5
q) where raze m
0 2 3 5
Run Code Online (Sandbox Code Playgroud)

k的^又名shape动词用的是失踪q,所以我只是做:

k) (^m)
000b
000b
q) 2 3#0b
000b
000b
Run Code Online (Sandbox Code Playgroud)

现在,因为:

q) parse "vs"
k) {x\:y}
Run Code Online (Sandbox Code Playgroud)

我试过两次都失败了:

q) (2 …
Run Code Online (Sandbox Code Playgroud)

k kdb q-lang

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

我如何*排除*

我有一个包含很多日期的数据框(数据).我希望从1970年之前删掉所有东西.我可以创建一个1970年以前的索引列表:

tmp <- which(data$data < '1970-01-01')
[1]  13446 102876 141199
Run Code Online (Sandbox Code Playgroud)

我想创建一个删除这三行的新表.就像是:

data.after.1970 <- data[!tmp, ]
Run Code Online (Sandbox Code Playgroud)

我知道我可以在 1970年之后创建一个所有事件的向量,并与之匹配:

tmp <- which(data$data > '1970-01-01')
data.after.1970 <- data[tmp, ]
Run Code Online (Sandbox Code Playgroud)

但我想知道我会用什么语法来排除项目​​.

UPDATE

我终于做到了这一点:

tmp <- which(data$data > as.Date('1970-01-01'))
data.after.1970 <- data[tmp, ]
Run Code Online (Sandbox Code Playgroud)

仔细看看它.which(data$data < as.Date('1970-01-01'))得到三个结果,但nrow(data) - nrow(data.after.1970)显示我丢了45行.summary(datae$date)清除了:

summary(data$date)
        Min.      1st Qu.       Median         Mean      3rd Qu.         Max.         NA's 
"1933-07-01" "1989-01-25" "1992-07-09" "1992-05-03" "1996-06-10" "2006-09-14"         "42" 
Run Code Online (Sandbox Code Playgroud)

由于我的目标是获得第二个数据集,所以如果我排除那些日期不好的数据,我可以比较我的结果,我实际上也希望删除那些带有NA值的数据.

我仍然想知道我将使用什么语法来排除一些数字向量而不是包含它.

r pattern-matching k

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

删除无键表中多余的重复条目

我有下表,并希望删除所有重复的行。我创建了一个列dup,用于计算重复项的数量。

delete from table where dup>1 将删除重复项的所有条目,但我仍希望表中保留1个条目。

ISIN         RIC      BLOOMBERG dup
-----------------------------------
LU1681046006 CWEm.BS  CWEM EB   2
LU1681046006 CWEm.BS  CWE EB    2
LU1681046006 CWEm.BS  CWEM EB   2
LU1681046006 CWEm.BS  CWE EB    2
LU1681046006 CWEm.CHI CWEM IX   2
LU1681046006 CWEm.CHI CWE IX    2
LU1681046006 CWEm.CHI CWEM IX   2
LU1681046006 CWEm.CHI CWE IX    2
LU1681046006 CWE.MI   CWE IM
LU1681046006 WDNR.DE  WDNR GY
Run Code Online (Sandbox Code Playgroud)

因此,结果表应如下所示:

ISIN         RIC      BLOOMBERG dup
-----------------------------------
LU1681046006 CWEm.BS  CWEM EB   2
LU1681046006 CWEm.BS  CWE EB    2
LU1681046006 CWEm.CHI CWEM IX …
Run Code Online (Sandbox Code Playgroud)

k kdb

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

标签 统计

k ×5

kdb ×4

q-lang ×2

functional-programming ×1

pattern-matching ×1

r ×1