我有一个大的df(例如,这里只有2列(
CancerVar<-c("CancerVar:9#Tier_II_potential","CancerVar:2#Tier_IV_benign","CancerVar:11#Tier_I_strong","CancerVar:2#Tier_IV_benign","CancerVar:2#Tier_IV_benign")
driver_mut_prediction<-c("not protein-affecting","TIER 1","passenger","TIER 2","passenger")
df<-data.frame(CancerVar,driver_mut_prediction)
df
CancerVar driver_mut_prediction
1 CancerVar:9#Tier_II_potential not protein-affecting
2 CancerVar:2#Tier_IV_benign TIER 1
3 CancerVar:11#Tier_I_strong passenger
4 CancerVar:2#Tier_IV_benign TIER 2
5 CancerVar:2#Tier_IV_benign passenger
我想在两列中使用部分(不同(字符串匹配来选择行。我想选择(CancerVar包含Tier I或Tier II(或(driver_mut_prediction包含Tier 1或Tier 2(的行
我试过:
df_sub<-df[with(df, grepl("TIER|Tier_I|Tier_II", paste(driver_mut_prediction, CancerVar,ignore.case=FALSE))),]
它仍然有最后一行(所以两个条件都不起作用(
我试过:
df %>% select(contains("Tier_I|Tier_II|TIER 1|TIER 2"))
具有0列和5000行的数据帧
请帮忙!
这种方法应该有效:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
CancerVar<-c("CancerVar:9#Tier_II_potential","CancerVar:2#Tier_IV_benign","CancerVar:11#Tier_I_strong","CancerVar:2#Tier_IV_benign","CancerVar:2#Tier_IV_benign")
driver_mut_prediction<-c("not protein-affecting","TIER 1","passenger","TIER 2","passenger")
df<-data.frame(CancerVar,driver_mut_prediction)
df %>%
filter(
grepl("Tier_I_|Tier_II_", CancerVar) |
grepl("TIER 1|TIER 2", driver_mut_prediction)
)
#> CancerVar driver_mut_prediction
#> 1 CancerVar:9#Tier_II_potential not protein-affecting
#> 2 CancerVar:2#Tier_IV_benign TIER 1
#> 3 CancerVar:11#Tier_I_strong passenger
#> 4 CancerVar:2#Tier_IV_benign TIER 2
创建于2022-04-06由reprex包(v2.0.1(
或者,使用基本R:
CancerVar<-c("CancerVar:9#Tier_II_potential","CancerVar:2#Tier_IV_benign","CancerVar:11#Tier_I_strong","CancerVar:2#Tier_IV_benign","CancerVar:2#Tier_IV_benign")
driver_mut_prediction<-c("not protein-affecting","TIER 1","passenger","TIER 2","passenger")
df<-data.frame(CancerVar,driver_mut_prediction)
df[grepl("Tier_I_|Tier_II_", df$CancerVar) | grepl("TIER 1|TIER 2", df$driver_mut_prediction),]
#> CancerVar driver_mut_prediction
#> 1 CancerVar:9#Tier_II_potential not protein-affecting
#> 2 CancerVar:2#Tier_IV_benign TIER 1
#> 3 CancerVar:11#Tier_I_strong passenger
#> 4 CancerVar:2#Tier_IV_benign TIER 2
创建于2022-04-06由reprex包(v2.0.1(
您可以使用str_detect
:
library(tidyverse)
df %>%
filter(str_detect(CancerVar, "Tier_I_|Tier_II_") |
str_detect(driver_mut_prediction, "TIER 1|TIER 2"))
输出
CancerVar driver_mut_prediction
1 CancerVar:9#Tier_II_potential not protein-affecting
2 CancerVar:2#Tier_IV_benign TIER 1
3 CancerVar:11#Tier_I_strong passenger
4 CancerVar:2#Tier_IV_benign TIER 2
数据
df <- structure(list(CancerVar = c("CancerVar:9#Tier_II_potential",
"CancerVar:2#Tier_IV_benign", "CancerVar:11#Tier_I_strong", "CancerVar:2#Tier_IV_benign",
"CancerVar:2#Tier_IV_benign"), driver_mut_prediction = c("not protein-affecting",
"TIER 1", "passenger", "TIER 2", "passenger")), class = "data.frame", row.names = c(NA,
-5L))