我有一个数据框,其中几列可能具有相同的名称.在这个小例子中,列"A"和"G"都出现两次:
A C G A G T
1 1 NA NA NA 1 NA
2 1 NA 5 3 1 NA
3 NA 1 NA NA NA 1
4 NA NA 1 2 NA NA
5 NA NA 1 1 NA NA
6 NA 1 NA NA NA 1
7 NA 1 NA NA NA 1
Run Code Online (Sandbox Code Playgroud)
我希望创建一个每列名称一列的数据集.对于每一行,应使用sum(..., na.rm = TRUE)每个列名称中值的sum()替换各列值.例如,在第二行中,应替换两个单独的"A"值(1和3)4.我事先并不知道多次出现哪些列名.
预期的输出将是:
# A C G T
# 1 1 0 …Run Code Online (Sandbox Code Playgroud) 我有一个运行长度编码的向量,按顺序表示基因组上每个位置的一些值.作为一个玩具示例,假设我只有一条长度为10的染色体,那么我会看到一个矢量
library(GenomicRanges)
set.seed(1)
toyData = Rle(sample(1:3,10,replace=TRUE))
Run Code Online (Sandbox Code Playgroud)
我想将其强制转换为GRanges对象.我能想到的最好的是
gr = GRanges('toyChr',IRanges(cumsum(c(0,runLength(toyData)[-nrun(toyData)])),
width=runLength(toyData)),
toyData = runValue(toyData))
Run Code Online (Sandbox Code Playgroud)
哪个有效,但速度很慢.有没有更快的方法来构建同一个对象?
我有两个列表,其中一个是大量的(数百万个元素),另外几个.我想做以下事情
bigArray=[0,1,0,2,3,2,,.....]
smallArray=[0,1,2,3,4]
for i in len(smallArray):
pts=np.where(bigArray==smallArray[i])
#Do stuff with pts...
Run Code Online (Sandbox Code Playgroud)
以上工作,但很慢.有没有办法更有效地做到这一点,而不诉诸于在C中写一些东西?
我想从矩阵坐标和值列表中初始化稀疏矩阵(如果重要的话,用于scipy minimum_spanning_tree).
也就是说,我有:
coords - Nx2 array of coordinates to be set in matrix
values - Nx1 array of the values to set.
Run Code Online (Sandbox Code Playgroud)
我试图使用lil_matrix来创建这个数组
A = lil_matrix((N,N))
A[coords[:,0],coords[:,1]] = values
Run Code Online (Sandbox Code Playgroud)
这是无法忍受的缓慢.实际上,在数组上循环并将每个元素设置为一个更快.即:
for i in xrange(N):
A[coords[i,0],coords[i,1]] = values[i]
Run Code Online (Sandbox Code Playgroud)
这比上面稍快,但不多.因为数组太大,所以创建NxN数组,设置值然后转换为稀疏不是一种选择.
有更好的方法可以做到这一点,还是我坚持这是我的算法中最慢的部分?
我想初始化data.frame外观中的列,以便:
df$newCol = 1
Run Code Online (Sandbox Code Playgroud)
其中df是我之前定义的data.frame,已经完成了一些处理.只要nrow(df)> 0,这不是问题,但有时我的data.frame的行长度为0,我得到:
> df$newCol = 1
Error in `[[<-`(`*tmp*`, name, value = 1) :
1 elements in value to replace 0 elements
Run Code Online (Sandbox Code Playgroud)
我可以通过将原始行更改为来解决此问题
df$newCol = rep(1,nrow(df))
Run Code Online (Sandbox Code Playgroud)
但这似乎有点笨拙,如果df中的行数很大,则计算量很大.这个问题有内置或标准的解决方案吗?或者我应该使用这样的自定义功能
addCol = function(df,name,value) {
if(nrow(df)==0){
df[,name] = rep(value,0)
}else{
df[,name] = value
}
df
}
Run Code Online (Sandbox Code Playgroud) 我的数据看起来像这样
df = data.frame(x=sample(1:5,100,replace=TRUE),y=rnorm(100),assay=sample(c('a','b'),100,replace=TRUE),project=rep(c('primary','secondary'),50))
Run Code Online (Sandbox Code Playgroud)
并使用此代码生成绘图
ggplot(df,aes(project,x)) + geom_violin(aes(fill=assay)) + geom_jitter(aes(shape=assay,colour=y),height=.5) + coord_flip()
Run Code Online (Sandbox Code Playgroud)
这给了我这个
这是成为我想要的方式的90%.但是如果每个点都只绘制在匹配测定类型的小提琴图上,我希望如此.也就是说,点的抖动位置被设定为使得三角形仅在上部蓝绿色小提琴图上以及在每个项目类型的底部红色小提琴图中的圆圈中.
任何想法如何做到这一点?