Menu
Coddy logo textTech

文字列の検索

CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 4/64。

grepl(pattern, x) は、x の各要素について、pattern を含む場合に TRUE を返します。正確な文字を検索するには、fixed = TRUE を追加します。これを指定しない場合、パターンは正規表現として扱われ、. や ? などの文字には特別な意味があります。

files <- c("report.csv", "photo.png", "data.csv")
print(grepl(".csv", files, fixed = TRUE))
print(files[grepl(".csv", files, fixed = TRUE)])

出力:

[1]  TRUE FALSE  TRUE
[1] "report.csv" "data.csv"  

startsWith(x, prefix) と endsWith(x, suffix) は、各文字列の先頭または末尾だけを確認します。これらの検索はすべて大文字と小文字を区別するため、大文字と小文字を無視するには、まず tolower() で変換します。

names <- c("Anna", "bob", "Andre")
print(startsWith(names, "An"))
print(startsWith(tolower(names), "b"))

出力:

[1]  TRUE FALSE  TRUE
[1] FALSE  TRUE FALSE

結果は論理ベクトルなので、sum() は一致した数を数え、any() は少なくとも1つあるかを確認します:

emails <- c("a@x.com", "bad-address", "c@y.org")
valid <- grepl("@", emails, fixed = TRUE)
print(sum(valid))
print(any(!valid))

出力:

[1] 2
[1] TRUE

grep(pattern, x) は一致する要素の位置を返し、grep(pattern, x, value = TRUE) は要素そのものを返します。

files <- c("a.csv", "b.txt", "c.csv")
print(grep(".csv", files, fixed = TRUE))
print(grep(".csv", files, fixed = TRUE, value = TRUE))

出力:

[1] 1 3
[1] "a.csv" "c.csv"
challenge icon

チャレンジ

簡単

count_domain(emails, domain)を完成させてください。emails内のアドレスのうち、@に続いてdomainで終わるものの数を返してください。大文字と小文字は区別しません。CY@CODDY.TECHはドメインcoddy.techとして数えます。

提供されたコードは、アドレスをカンマ区切りの1行として読み取り、続いてドメインを読み取り、返された数を出力します。

自分で試してみよう

count_domain <- function(emails, domain) {
  # ここにコードを書いてください
  0
}

# 提供された入出力コード:そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
emails <- strsplit(input[1], ",")[[1]]
cat(count_domain(emails, input[2]), sep = "\n")
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rオンラインコンパイラ