替换给定数据框列中的部分值

时间:2016-09-09 19:18:16

标签: r

我有一个这样的数据框:

TAGNAME                                  VALUE
XX:YY:ZZ:WXYX:title_for_this.and_that_a   20.2
PP:YY:ZZ:ABCF:title_for_this.and_that_b   45.7
QQ:YY:ZZ:FGHJ:title_for_this.and_that_c   27.2
RR:YY:ZZ:JYHG:title_for_this.and_that_d   30.9

我需要删除最后一个冒号之前发生的TAGNAME中的所有字符。所以我需要它:

TAGNAME                     VALUE
title_for_this.and_that_a    20.2
title_for_this.and_that_b    45.7
title_for_this.and_that_c    27.2
title_for_this.and_that_d    30.9

我可以使用以下方法获取最后一个冒号之前的所有字符:

tagnames <- sapply(strsplit(data_frame$TAGNAME, "\\:[^\\:]*$"), "[", 1)

我尝试使用它来从TAGNAME中删除字符,如下所示:

for(i in 1:nrow(data_frame)) {
   data_frame[i,1] <- gsub(data_frame[i,1], tagnames[i],'')
 }

除了是一种循环数据框架的糟糕方式之外,它不起作用。

1 个答案:

答案 0 :(得分:2)

df$TAGNAME = sub(".*:","", df$TAGNAME)

正则表达式的解释&#34;。*:&#34;
。选择任何字符*出现之前0次或更多次:
有关正则表达式的其他信息,请参阅this website