如何用功能性的,基于数组的语言(如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) 斐波那契很好:
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) 给定(矩形)邻接矩阵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) 我有一个包含很多日期的数据框(数据).我希望从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值的数据.
我仍然想知道我将使用什么语法来排除一些数字向量而不是包含它.
我有下表,并希望删除所有重复的行。我创建了一个列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)