Проверьте, какие строки с каждым словом в строке являются заглавными и разделены пробелом - PullRequest
1 голос
/ 03 июля 2019

У меня есть столбец со строкой значений, как показано ниже

a=["iam best in the world" "you are awesome" ,"Iam Good"]

и мне нужно проверить, какие строки каждого слова в строке строчные и разделены пробелом.

Я знаю, как преобразовать их в верхний и разделенный пробелами, но мне нужно найти строки, разделенные строчными и пробелами.

Я пытался использовать

grepl("\\b([a-z])\\s([a-z])\\b",aa, perl =  TRUE)

Ответы [ 5 ]

2 голосов
/ 03 июля 2019

Мы можем попробовать использовать grepl с шаблоном \b[a-z]+(?:\\s+[a-z]+)*\b:

matches = a[grepl("\\b[a-z]+(?:\\s+[a-z]+)*\\b", a$some_col), ]
matches

  v1              some_col
1  1 iam best in the world
2  2       you are awesome

Данные:

a <- data.frame(v1=c(1:3),
                some_col=c("iam best in the world", "you are awesome", "Iam Good"))

Используемый шаблон регулярного выражения соответствует слову в нижнем регистре, за которым следуют пробел и другое слово в нижнем регистре, последнее повторяется ноль или более раз. Обратите внимание, что мы помещаем границы слов вокруг шаблона, чтобы гарантировать, что мы не получим ложные совпадения флага для слова, начинающегося с заглавной буквы.

0 голосов
/ 03 июля 2019

Мы можем использовать filter

library(dplyr)
a %>%
   filter(tolower(some_col) == some_col)
#   v1              some_col
#1  1 iam best in the world
#2  2       you are awesome
0 голосов
/ 03 июля 2019

Другая идея заключается в использовании stri_trans_totitle из stringi пакета,

a[!!!stringi::stri_trans_totitle(as.character(a$some_col)) == a$some_col,]

#  v1              some_col
#1  1 iam best in the world
#2  2       you are awesome
0 голосов
/ 03 июля 2019

Мы можем преобразовать столбец в нижний регистр и сравнить с фактическим значением.Используя данные @ Tim

a[tolower(a$some_col) == a$some_col, ]

#  v1              some_col
#1  1 iam best in the world
#2  2       you are awesome

Если нам также нужно проверить место, мы могли бы добавить еще одно условие с помощью grepl

a[tolower(a$some_col) == a$some_col & grepl("\\s+", a$some_col), ]
0 голосов
/ 03 июля 2019
x <- c("iam best in the word ", "you are awesome", "Iam Good")

Здесь я сделал что-то другое, сначала я разделил пробелом, затем я проверял строчные буквы.Таким образом, выходные данные представляют собой список для каждой фразы с разделенными пробелами только строчными словами.

sapply(strsplit(x, " "), function(x) {
  x[grepl("^[a-z]", x)]
})
...