2013-11-26 145 views
1

我有一个有两列的数据框,并希望根据第一列的值填充第二列(当前为空)。如果在第一列的任何位置有“_ab”,“_cd”或“_ef”,则分别应在第2列中显示“ab”,“cd”或“ef”。基于模式匹配添加列

这就是它的样子:

c1   c2 
s_d_ab  ab 
a_cd_aa cd 
s_sar_ef ef 

Excel中我会抄下配方=IF(FIND("_ab",A1), "ab", ""),然后隐藏在那里没有匹配的行,并与=IF(FIND("_ab",A1), "ab", "")覆盖公式。等等。不是最优雅的方法,但它的工作原理。

在R中处理这个问题的最好方法是什么?

我设法得到一个条件适用的逻辑值向量(grepl("_abc", data$c1)),但不知道如何设置第二列的值。

+0

你能在话你如何挑选你挑选每根弦的这部分解释?为什么不是第三个例子'aa'? – Justin

+0

@Justin,我编辑了我的问题:如果在第一列的任何位置有“_ab”,“_cd”或“_ef”**,则分别为“ab”,“cd”或“ef”第2列。 – jk454

回答

3

可以使用sub功能:

x <- c('s_d_ab', 'a_cd_aa', 's_sar_ef') 
sub('.*_(ab|cd|ef).*', '\\1', x) 
# [1] "ab" "cd" "ef" 
+0

谢谢!那很快。 – jk454