我有一个包含两列的数据框,并希望根据第一列的值填充第二列(当前为空)。如果第一列中的任何位置都有“_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)
),但不知道如何设置第二列的值。
答案 0 :(得分:4)
您可以使用sub
功能:
x <- c('s_d_ab', 'a_cd_aa', 's_sar_ef')
sub('.*_(ab|cd|ef).*', '\\1', x)
# [1] "ab" "cd" "ef"