基于python或R中的列筛选文本文件的行
我有一个32000行51列的大文本文件 行是基因,列是样本。每个细胞包含每个样本中每个基因的值 我想删除那些超过10个小于或等于2的值的基因(行)。例如,基于python或R中的列筛选文本文件的行,python,r,file,row,Python,R,File,Row,我有一个32000行51列的大文本文件 行是基因,列是样本。每个细胞包含每个样本中每个基因的值 我想删除那些超过10个小于或等于2的值的基因(行)。例如,0 1 2 3 4 5只有三个值小于或等于2,因此应该保留 我使用了下面的一段代码来实现这一点,但在运行它之后,我仍然有许多行的值超过10个小于或等于2: output_file = open("results.txt", 'w') for line in open(input_filepath, 'r'): values = line.s
0 1 2 3 4 5
只有三个值小于或等于2,因此应该保留
我使用了下面的一段代码来实现这一点,但在运行它之后,我仍然有许多行的值超过10个小于或等于2:
output_file = open("results.txt", 'w')
for line in open(input_filepath, 'r'):
values = line.split(' ')
if len([value for value in values[1:] if float(value) <= 2]) <= 10:
output_file.write(line)
使用R这很简单:
#some example data
set.seed(42)
DF <- data.frame(matrix(rnorm(30), ncol=3))
DF <- cbind(id=letters[1:10], DF)
# id X1 X2 X3
# 1 a 1.37095845 1.3048697 -0.3066386
# 2 b -0.56469817 2.2866454 -1.7813084
# 3 c 0.36312841 -1.3888607 -0.1719174
# 4 d 0.63286260 -0.2787888 1.2146747
# 5 e 0.40426832 -0.1333213 1.8951935
# 6 f -0.10612452 0.6359504 -0.4304691
# 7 g 1.51152200 -0.2842529 -0.2572694
# 8 h -0.09465904 -2.6564554 -1.7631631
# 9 i 2.01842371 -2.4404669 0.4600974
# 10 j -0.06271410 1.3201133 -0.6399949
#remove rows if more than 2 values <= 0
DF[rowSums(DF[, -1] <= 0) <= 2,]
# id X1 X2 X3
# 1 a 1.3709584 1.3048697 -0.3066386
# 2 b -0.5646982 2.2866454 -1.7813084
# 3 c 0.3631284 -1.3888607 -0.1719174
# 4 d 0.6328626 -0.2787888 1.2146747
# 5 e 0.4042683 -0.1333213 1.8951935
# 6 f -0.1061245 0.6359504 -0.4304691
# 7 g 1.5115220 -0.2842529 -0.2572694
# 9 i 2.0184237 -2.4404669 0.4600974
# 10 j -0.0627141 1.3201133 -0.6399949
#一些示例数据
种子(42)
没错。例如,在特定的行中,至少有10列的值介于0和2之间,因此我想删除这些行您显示的代码看起来是正确的,因此很难在此进行调试。为了帮助您进行调试,我建议将len
表达式粘贴到一个变量中,并将其与行一起临时发送到输出文件中,这样您就可以看到代码对len
表达式的看法,然后您就可以深入了解它为什么会这样想,目前还不清楚。@ali,请注意Q中显示的“第一行”只有不到20列,而不是60列,因此不可能看到问题——您可能需要编辑Q以修复该问题(可能在修复代码格式所需的多次编辑过程中被破坏,该格式无法读取).有人刚刚编辑了代码。我想他删除了其他专栏。你是认真的吗?读一篇教程。
#some example data
set.seed(42)
DF <- data.frame(matrix(rnorm(30), ncol=3))
DF <- cbind(id=letters[1:10], DF)
# id X1 X2 X3
# 1 a 1.37095845 1.3048697 -0.3066386
# 2 b -0.56469817 2.2866454 -1.7813084
# 3 c 0.36312841 -1.3888607 -0.1719174
# 4 d 0.63286260 -0.2787888 1.2146747
# 5 e 0.40426832 -0.1333213 1.8951935
# 6 f -0.10612452 0.6359504 -0.4304691
# 7 g 1.51152200 -0.2842529 -0.2572694
# 8 h -0.09465904 -2.6564554 -1.7631631
# 9 i 2.01842371 -2.4404669 0.4600974
# 10 j -0.06271410 1.3201133 -0.6399949
#remove rows if more than 2 values <= 0
DF[rowSums(DF[, -1] <= 0) <= 2,]
# id X1 X2 X3
# 1 a 1.3709584 1.3048697 -0.3066386
# 2 b -0.5646982 2.2866454 -1.7813084
# 3 c 0.3631284 -1.3888607 -0.1719174
# 4 d 0.6328626 -0.2787888 1.2146747
# 5 e 0.4042683 -0.1333213 1.8951935
# 6 f -0.1061245 0.6359504 -0.4304691
# 7 g 1.5115220 -0.2842529 -0.2572694
# 9 i 2.0184237 -2.4404669 0.4600974
# 10 j -0.0627141 1.3201133 -0.6399949