根据模式匹配添加列

时间:2013-11-26 21:53:00

标签: r

我有一个包含两列的数据框,并希望根据第一列的值填充第二列(当前为空)。如果第一列中的任何位置都有“_ab”,“_ cd”或“_ef”,则“ab”,“cd”或“ef”应分别位于第2列。

它应该是这样的:

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)),但不知道如何设置第二列的值。

1 个答案:

答案 0 :(得分:4)

您可以使用sub功能:

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