我试图在python中重现R aggregate()
函数,但没有连接。对于每一行,我只想计算给定列中具有相似值的行的出现次数。python列中具有相同值的行数
我试图从这里迈出了一段代码解决它: http://timotheepoisot.fr/2011/12/01/the-aggregate-function-in-python/
我实现的修改由###
表示。我目前遇到的问题是第一列[0]包含字符串,而代码似乎只能与浮动工作。
import numpy as np
import scipy as sp
def MSD(vec):
return [np.mean(vec),np.std(vec)]
def aggregate(df,by=0,to=1,func=np.sum):
Dat = []
# ColBy = df.T[by]
ColBy = int(df.T[by][3:]) ### my attempt to read only the numbers in the first column's character strings
ColTo = df.T[to]
UniqueBy = np.sort(np.unique(ColBy))
for ub in UniqueBy:
uTo = ColTo[ColBy==ub]
Out = func(uTo)
# Dat.append(np.concatenate(([ub],Out)))
Dat.append([ub],Out) ### because I do not want to concatenate
return Dat
test_df = np.loadtxt('in_test.txt')
Agr = aggregate(test_df,0,3,MSD)
sp.savetxt("out_test.txt", Agr)
这是错误消息:
Traceback (most recent call last):
File "count_same_reads.py", line 30, in <module>
test_df = np.loadtxt('in_test.txt')
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 796, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: could not convert string to float: Tag19184
我的数据是制表符分隔的,主要含有字符串,除了第3列中,我想要写的行出现的次数。
下面是测试数据:
Tag19184 CTAAC hffef 1 a 36 - chr1 10006 0 36M 36
Tag19184 CTAAC hffef 1 a 36 - chr1 10012 0 36M 36
Tag19184 CTAAC hffef 1 a 36 - chr1 10018 0 36M 36
Tag19184 CTAAC hffef 1 a 36 - chr1 10024 0 36M 36
Tag19184 CTAAC hffef 1 a 36 - chr1 10030 0 36M 36
Tag19184 CTAAC hffef 1 a 36 - chr1 10036 0 36M 36
Tag19184 CTAAC hffef 1 a 36 - chr1 10042 0 36M 36
Tag20198 CTAAC hffef 1 a 36 - chr1 10048 0 36M 36
Tag20198 CTAAC hffef 1 a 36 - chr1 10054 0 36M 36
Tag45093 CTAAC hffef 1 a 36 - chr1 10060 0 36M 36
结果应该是这样的:
Tag19184 CTAAC hffef 7 a 36 - chr1 10006 0 36M 36
Tag19184 CTAAC hffef 7 a 36 - chr1 10012 0 36M 36
Tag19184 CTAAC hffef 7 a 36 - chr1 10018 0 36M 36
Tag19184 CTAAC hffef 7 a 36 - chr1 10024 0 36M 36
Tag19184 CTAAC hffef 7 a 36 - chr1 10030 0 36M 36
Tag19184 CTAAC hffef 7 a 36 - chr1 10036 0 36M 36
Tag19184 CTAAC hffef 7 a 36 - chr1 10042 0 36M 36
Tag20198 CTAAC hffef 2 a 36 - chr1 10048 0 36M 36
Tag20198 CTAAC hffef 2 a 36 - chr1 10054 0 36M 36
Tag45093 CTAAC hffef 1 a 36 - chr1 10060 0 36M 36
正如你可能会说,我不是在蟒蛇那么好还。任何的建议都受欢迎。
[编辑] PS。数据已按列[0]排序。
有[聚集](http://pandas.pydata.org/pandas “pandas”模块中的-docs/dev/groupby.html#aggregation)函数。但我不知道R. –
是否有可能使用它_without_ concatenating? – biohazard