考虑矩阵d
和r
with dim(d) = J x D
和dim(r) = J x R
.让fun(a,b)成为一个函数,它接受两个相同长度的向量并返回一些数字.
我想把列的d
和列r
分别作为我感兴趣的单位,并适用outer
于它们.
下面的代码创建的列的列表来完成这个d
和r
,然后同时使用outer
和sapply
:
d.cols <- split(d, col(d))
r.cols <- split(r, col(r))
outer(d.cols, r.cols,
function(x,y) {
sapply(seq_along(x),
function(i) {
Fun(x[[i]], y[[i]]) })} )
Run Code Online (Sandbox Code Playgroud)
代码做我想要的并且相对有效,但是笨拙且不清楚.有没有更好的方法来实现我想要达到的目标?
我最近偶然发现了replace()
和"[<-"
.它们似乎具有类似的功能,例如"[<-"
我可以做这样的事情:
> x.tst <- array(1:6, c(2,3))
> s.tst <- array(0, c(2,3))
> s.tst
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
> s.tst[1:3] <- 1
> "[<-"(x.tst, s.tst==1, 0)
[,1] [,2] [,3]
[1,] 0 0 5
[2,] 0 4 6
> x.tst
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
Run Code Online (Sandbox Code Playgroud)
有人可以帮助澄清差异吗?replace
vs 的优势是什么"[<-"
,反之亦然?
要查看此问题,请考虑以下数据框
In [66]: dat = pandas.DataFrame(['a','b','c','d','e','f','g','h'],
columns=['letters'])
In [67]: dat['numbers'] = pandas.Series([1,2,3,4,5,6,7,8])
In [68]: dat['names'] = pandas.Series(['jim','jan','jerry','george'
,'mary','mary','sue','sue'])
In [69]: dat
Out[69]:
letters numbers names
0 a 1 jim
1 b 2 jan
2 c 3 jerry
3 d 4 george
4 e 5 mary
5 f 6 mary
6 g 7 sue
7 h 8 sue
Run Code Online (Sandbox Code Playgroud)
按名称分组
In [78]: dat = dat.groupby(['names'])[['letters']]
Run Code Online (Sandbox Code Playgroud)
现在我尝试连续写字会产生一个有趣的结果:
In [80]: dat.apply(lambda x: '|'.join(set(x)))
Out[80]:
names
george letters|numbers|names
jan letters|numbers|names
jerry letters|numbers|names
jim letters|numbers|names
mary …
Run Code Online (Sandbox Code Playgroud)