假设这个框架:
col1<- c('a_b_c_fv', 'ff_g1_h_fv','e_ii_jjjj_fv' ) df <- data.frame(col1)
希望找到下划线_的第三个出现位置,然后将该位置写回数据框。所以最终结果看起来像这样:
df$location <- c(6,8,10)
请问我该怎么做?我已经尝试
unlist(gregexpr('_', df$col1))[3]
但我只能得到第一行的位置
qpgpyjmq1#
因为gregexpr为每个向量元素输出一个列表,所以需要在unlist之前提取相应的值。提取信息的一个例子是使用sapply。
gregexpr
unlist
sapply
df$location <- sapply(gregexpr('_', df$col1), `[[`, 3) df col1 location 1 a_b_c_fv 6 2 ff_g1_h_fv 8 3 e_ii_jjjj_fv 10
t40tm48m2#
可以使用nchar + gsub
nchar
gsub
> nchar(gsub("(([^_]+_){3}).*", "\\1", col1)) [1] 6 8 10
或regexpr
regexpr
> attr(regexpr("([^_]+_){3}", col1), "match.length") [1] 6 8 10
2条答案
按热度按时间qpgpyjmq1#
因为
gregexpr
为每个向量元素输出一个列表,所以需要在unlist
之前提取相应的值。提取信息的一个例子是使用sapply
。t40tm48m2#
可以使用
nchar
+gsub
或
regexpr