我正在使用 R 編程語言。
我有一個看起來像這樣的資料集:
id = 1:5
col1 = c("john", "henry", "adam", "jenna", "peter")
col2 = c("river B8C 9L4", "Field U9H 5E2 PP", "NA", "ocean A1B 5H1 dd", "dave")
col3 = c("matt", "steve", "forest K0Y 1U9 hu2", "NA", "NA")
col4 = c("Phone: 111 1111 111", "Phone: 222 2222", "Phone: 333 333 1113", "Phone: 444 111 1153", "Phone: 111 111 1121")
my_data = data.frame(id, col1, col2, col3, col4)
id col1 col2 col3 col4
1 1 john river B8C 9L4 matt Phone: 111 1111 111
2 2 henry Field U9H 5E2 PP steve Phone: 222 2222
3 3 adam NA forest K0Y 1U9 hu2 Phone: 333 333 1113
4 4 jenna ocean A1B 5H1 dd NA Phone: 444 111 1153
5 5 peter dave NA Phone: 111 111 1121
對于這個資料集,我想:
- 始終保留 id 列和第一列
- 并使用以下模式保留第一列:LETTER NUMBER LETTER NUMBER LETTER NUMBER
- 始終保留帶有電話號碼的列
這看起來像這樣:
id col1 new_col col4
1 1 john river B8C 9L4 Phone: 111 1111 111
2 2 henry Field U9H 5E2 PP Phone: 222 2222
3 3 adam forest K0Y 1U9 hu2 Phone: 333 333 1113
4 4 jenna ocean A1B 5H1 Phone: 444 111 1153
我在網上找到了這個可以識別所需模式的 REGEX 代碼:
> apply(my_data, 1, function(x) gsub('(([A-Z] ?[0-9]){3})|.', '\\1', toString(x)))
[1] "B8C 9L4" "U9H 5E2" "K0Y 1U9" "A1B 5H1" ""
但是有人可以告訴我如何在 R 中使用這個 REGEX 代碼來完成我想要的結果嗎?
謝謝!
uj5u.com熱心網友回復:
library(tidyverse)
my_data%>%
pivot_longer(-c(id, col1))%>%
filter(str_detect(value, "([A-Z] ?[0-9]){3}|Phone:[0-9 ] "))%>%
mutate(name = ifelse(str_detect(value,"Phone"),name, "new_col"))%>%
pivot_wider(values_fn = 'first')
# A tibble: 5 × 4
id col1 new_col col4
<int> <chr> <chr> <chr>
1 1 john river B8C 9L4 Phone: 111 1111 111
2 2 henry Field U9H 5E2 PP Phone: 222 2222
3 3 adam forest K0Y 1U9 hu2 Phone: 333 333 1113
4 4 jenna ocean A1B 5H1 dd Phone: 444 111 1153
5 5 peter NA Phone: 111 111 1121
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533744.html
標籤:r正则表达式数据操作