2015-07-01 32 views
2

我有一个药物名称的数据框。每种药物都有多种剂量。例如,我有:删除以数字值开头的字符串的最后一部分

x <- data.frame(c("DrugX 10 mg", "DrugX 20 mg", "DrugX 30mg", "DrugX 2% Cream", "DrugX 10% Gel", "DrugY 20 mg", "DrugY 30 mg")) 

x[,1] <- as.character(x[,1]) 

我想删除给定数值后的所有内容。所以我想一个新的数据帧,看起来像这样:

xnew <- data.frame(c("DrugX", "DrugX", "DrugX", "DrugX", "DrugX", "DrugY", "Drug Y")) 

在这一点上,我想采取“唯一”

xnew2 <- unique(xnew) 

,所以我的最终产品将是

xnew2 <- c("DrugX", "Drug Y") 

感谢您的帮助!

回答

2

您可以尝试sub

v1 <- sub('\\s*\\d+.*$', '', x[,1]) 
v1 
#[1] "DrugX" "DrugX" "DrugX" "DrugX" "DrugX" "DrugY" "DrugY" 

unique(v1) 
#[1] "DrugX" "DrugY" 
1

手法高明的可能性:

unique(gsub(' .*','\\1',x[,1])) 
#[1] "DrugX" "DrugY" 
+0

为什么你需要'\\ 1'?我没有找到任何捕获组 – akrun

相关问题