Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于python或R中的列筛选文本文件的行_Python_R_File_Row - Fatal编程技术网

基于python或R中的列筛选文本文件的行

基于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

我有一个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.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