【问题标题】:Replace cells not matched a list of string to NA for only for certain cols in R仅针对 R 中的某些列将不匹配字符串列表的单元格替换为 NA
【发布时间】:2018-03-26 14:36:01
【问题描述】:

我有一个包含多个列的数据框“abnormal2”,我以剪切一些列为例;

   id class1 class2 class3 class4 class5
1   1 PATH   PATH   PATH   PATH   PATH
2   2 rLS          PATH     LB   <NA>
3   3 PATH   PATH   PATH   <NA>   <NA>
4   4 PATH    VUS    VUS   <NA>   <NA>
5   5 PATH    VUS    VUS   <NA>   <NA>
6   6 PATH   PATH    VUS   PATH   <NA>
7   7 MPATH    VUS    VUS   <NA>   <NA>
8   8 VUS    VUS    VUS   <NA>   <NA>
9   9 PATH    VUS    VUS   <NA>   <NA>
10  10 PATH   PATH          <NA>   <NA>

我想要将任何与字符串列表 (MPATH,VUS_LPATH,VUS_LB,PATH,VUS,LB,Normal) 不匹配的单元格替换为 NA。这仅适用于从 class1 到 class5 的 cols; 结果可能是这样的:

   id class1 class2 class3 class4 class5
1   1 PATH   PATH   PATH   PATH   PATH
2   2 NA    NA      PATH     LB   <NA>
3   3 PATH   PATH   PATH   <NA>   <NA>
4   4 PATH    VUS    VUS   <NA>   <NA>
5   5 PATH    VUS    VUS   <NA>   <NA>
6   6 PATH   PATH    VUS   PATH   <NA>
7   7 MPATH    VUS    VUS   <NA>   <NA>
8   8 VUS    VUS    VUS   <NA>   <NA>
9   9 PATH    VUS    VUS   <NA>   <NA>
10  10 PATH   PATH    NA     <NA>   <NA>

我使用了下面的代码,但它不起作用:

sel <- grepl("class",names(abnormal2))
abnormal2[sel] <- data.frame(lapply(abnormal2[sel], function(x) gsub([^MPATH|^VUS\\_LPATH|^VUS\\_LB|^PATH|^VUS|^LB|^Normal]","", x)))

【问题讨论】:

    标签: r dataframe qsub


    【解决方案1】:

    如果您的字符串匹配是准确的(而不是需要正则表达式),那么以您的想法为基础,以下将起作用。

    sel <- grepl("class",names(abnormal2))
    
    matches <- c("MPATH", "VUS_LPATH", "VUS_LB", "PATH", "VUS", "LB", "Normal")
    
    abnormal2[sel] <- data.frame(lapply(abnormal2[sel], function(x) {
       x[!x %in% matches] <- NA
       x
    }), stringsAsFactors = F)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2021-07-16
      相关资源
      最近更新 更多