【问题标题】:Filtering and replacing from multiple columns从多列过滤和替换
【发布时间】:2017-12-15 13:20:04
【问题描述】:

我有一个文件,我必须将大于 0.05 (pval > 0.05) 的 pvalue 替换为 NA ,换句话说,保留 pval < 0.05 并将 pval > 0.05 替换为 NA

例如:

Rv_FC    Rv_Pval  Gc_FC  Gc_Pval ......
2          0.001   3      0.99
3          0.99    1      0.0002
3          0.0001  2      0.89

输出:

Rv_FC    Rv_Pval  Gc_FC  Gc_Pval ......
2          0.001   3      NA 
3          NA      1      0.0002
3          0.0001  2      NA

仅应考虑 pval 列,如果它们的值 > 0.05 ,则应将其替换为 NA

优点:pval 列位于第 3、5、7 列......

【问题讨论】:

  • 堆栈溢出不是代码编写服务。提供您自己的尝试。
  • 只需子集Pval 的列并替换即i1 <- [grep("Pval", names(df1); df1[i1][df1[i1] > 0.05\ <- NA
  • 您确定这些标签吗?你真的想要一个涉及pythonrlinuxawksed 的解决方案吗?
  • 当然我在 R、awk 中尝试过,当我做不到的时候我来到了这里..
  • 嗨。欢迎来到 StackOverflow。请阅读stackoverflow.com/help/how-to-ask,然后分享您的代码stackoverflow.com/help/mcve 的最小、完整和可验证的示例,或者您迄今为止为解决问题所做或尝试的任何事情。然后点击edit 编辑您的问题,以便我们提供帮助。

标签: python r linux awk sed


【解决方案1】:

这个应该可以工作:

awk 'BEGIN{ OFS = "\t" }NR==1{ for ( i = 1; i <= NF; i++) if ( $i ~"Pval" ) a[i]; print $0}NR>1{for ( i in a ) if ( $i > 0.5 ) $i = "NA"; print $0 }' file

输出:

Rv_FC    Rv_Pval  Gc_FC  Gc_Pval  
2        0.001     3      NA
3        NA        1      0.0002
3        0.0001    2      NA

【讨论】:

  • Mhhhh ......这很奇怪。对我来说,它完美无缺。它有没有产生任何输出?
  • 对我也很好。
  • for (i in 2:89 ) { for(j in seq(3,47,2)){ if(tab[i,j]
  • @JFS31:成功了!!稍作修改是 $i > 0.05 而不是 $i > 0.5 ,我的错我没有检查..非常感谢您的帮助!!
  • @vivekkashyap 很高兴我能帮助你。那如果你能接受我的回答就好了。
猜你喜欢
  • 2022-07-07
  • 2020-04-05
  • 2018-02-15
  • 2021-04-22
  • 2020-12-27
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多