str_locate用處與str_subset、str_which很像,都是查找位置,有趣的是這幾個函數查找的結果與方式都不相同,str_subset取出符合的字串,str_which輸出符合的字串位置,str_locate則是輸出準確位置
基本語法
str_locate(dataset$string, 查找的字元或字串)
str_locate_all(dataset$string, 查找的字元或字串)
有幾點要注意一下
- 小寫與大寫判斷為不同字元,需要完全確定大小寫
- 進行搜尋時" "與"[ ]"定義上與其他函數不同
- 重複的結果並不會全部返回,除非使用str_locate_all函數
創個數據集先
# 建立數據集
stringr_df <- tibble(
weekday = c("Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday")
)
# 輸出結果
r$> stringr_df
# A tibble: 7 x 1
weekday
<chr>
1 Sunday
2 Monday
3 Tuesday
4 Wednesday
5 Thursday
6 Friday
7 Saturday
查找"day",可以看到day在第一個字符串中從4開始6結束
# 查找day
str_locate(stringr_df$weekday, "day")
# 輸出結果
r$> str_locate(str
ingr_df$weekday, "day")
start end
[1,] 4 6
[2,] 4 6
[3,] 5 7
[4,] 7 9
[5,] 6 8
[6,] 4 6
[7,] 6 8
如果使用模糊查找或是字元的方式呢?結果與其他函數不同,使用[]查找的結果只有進行"d"的搜尋就返回了,字元查找以"e"去搜尋,Wednesday應該是2, 5,但返回的是2, 2,表示搜尋返回的部分若重複的話只有返回第一個搜尋結果
# 用[ ]查找day
str_locate(stringr_df$weekday, "[day]")
# 輸出結果
r$> str_locate(stringr_df$weekday, "[day]")
start end
[1,] 4 4
[2,] 4 4
[3,] 5 5
[4,] 3 3
[5,] 6 6
[6,] 4 4
[7,] 2 2
# 查找"e"
str_locate(stringr_df$weekday, "e")
# 輸出結果
r$> str_locate(stringr_df$weekday, "e")
start end
[1,] NA NA
[2,] NA NA
[3,] 3 3
[4,] 2 2
[5,] NA NA
[6,] NA NA
[7,] NA NA
使用str_locate_all進行查找,會將重複的進行位置查找後輸出
# 查找"e"
str_locate_all(stringr_df$weekday, "e")
# 輸出結果
r$> str_locate_all(stringr_df$weekday, "e")
[[1]]
start end
[[2]]
start end
[[3]]
start end
[1,] 3 3
[[4]]
start end
[1,] 2 2
[2,] 5 5
[[5]]
start end
[[6]]
start end
[[7]]
start end
沒有留言:
張貼留言