在字符串向量中用第n个字母提取条目

时间:2013-11-19 15:11:50

标签: r

我有一个行向量,如下所示:

1   118_o_m_n_a.jpg
2   122_m_f_h_a.jpg
3   152_y_f_n_a.jpg
4   160_y_m_h_a.jpg
5   083_o_m_a_a.jpg

如何提取所有条目,例如,第9个元素(字母)是“n”(或“h”,或“a”,在这种情况下)?

3 个答案:

答案 0 :(得分:5)

您可以使用substr提取第9个字母:

substr(c("122_m_f_h_a.jpg", "152_y_f_n_a.jpg"), 9, 9)
[1] "h" "n"

使用==和子集进行剩余任务。

答案 1 :(得分:3)

一种方法是使用匹配字符串开头的正则表达式("^"),后跟任意类型的8个字符(".{8}"),最后,在第9个位置,由字符"n"

v <- c("118_o_m_n_a.jpg", "122_m_f_h_a.jpg", "152_y_f_n_a.jpg", 
       "160_y_m_h_a.jpg", "083_o_m_a_a.jpg")

## Find the indices of matching elements
grep("^.{8}n", v)
# [1] 1 3

## Return matching elements
grep("^.{8}n", v, value=TRUE)
# [1] "118_o_m_n_a.jpg" "152_y_f_n_a.jpg"

答案 2 :(得分:0)

您可以使用strsplit

#dummy data
df <- read.table(text="
118_o_m_n_a.jpg
122_m_f_h_a.jpg
152_y_f_n_a.jpg
160_y_m_h_a.jpg
083_o_m_a_a.jpg",as.is=T)

#split
df_split <- cbind(df,t(matrix(unlist(strsplit(df$V1,split="_")),nrow=nrow(df))))
df_split
#V1   1 2 3 4     5
#1 118_o_m_n_a.jpg 118 o m n a.jpg
#2 122_m_f_h_a.jpg 122 m f h a.jpg
#3 152_y_f_n_a.jpg 152 y f n a.jpg
#4 160_y_m_h_a.jpg 160 y m h a.jpg
#5 083_o_m_a_a.jpg 083 o m a a.jpg

#filter
df_split[ df_split[,5]=="n",]
#V1   1 2 3 4     5
#1 118_o_m_n_a.jpg 118 o m n a.jpg
#3 152_y_f_n_a.jpg 152 y f n a.jp