【发布时间】:2017-06-18 14:38:51
【问题描述】:
我有一个包含一列字符串的数据框,并希望将这些字符串的子字符串提取到一个新列中。
这里是一些示例代码和数据,显示我想在id 列中的最后一个下划线字符之后获取字符串,以创建new_id 列。
id 列条目总是有 2 个下划线字符,它总是我想要的最后一个子字符串。
df = data.frame( id = I(c("abcd_123_ABC","abc_5234_NHYK")), x = c(1.0,2.0) )
require(dplyr)
df = df %>% dplyr::mutate(new_id = strsplit(id, split="_")[[1]][3])
我期待 strsplit 依次作用于每一行。
但是,new_id 列在每一行中仅包含 ABC,而我希望在第 1 行中包含 ABC,在第 2 行中包含 NHYK。您知道为什么会失败以及如何实现我想要的吗?
【问题讨论】:
-
这是因为您致电
strsplit。[[1]]总是抓取列表的第一个元素。 -
在基础 R 中,就像一点正则表达式魔法一样简单:
df$newVar <- sub(".*_([A-Z]+)$", "\\1", df$id)。