我有一个“名称”列,名称如下:
Preety ..
Sudalai Rajkumar S.
Parvathy M. S.
Navaraj Ranjan Arthur
我想知道其中哪个是单词名称,例如本例中的Preety。
我尝试消除“。”和“”并计算长度,并使用此长度与原始字符串长度的差。
但是它没有给我想要的输出。请帮忙。
NBData3$namewodot <- gsub(" .","",NBData3$Client.Name)
NBData3$namewoblank <- gsub(" ","",NBData3$namewodot)
wordlength <- NBData3$namelengthchar-nchar(as.character(NBData3$namewoblank))
答案 0 :(得分:2)
在基数R中,您可以使用grep
:
grep("^\\S+$", gsub("\\W+$", "", names), value=T)
[1] "Preety"
如果您需要使用最初给出的名称,则只需使用[
:
names[grep("^\\S+$", gsub("\\W+$", "", names))]
[1] "Preety .."
答案 1 :(得分:1)
这似乎适用于您的示例
names = c("Preety ..",
"Sudalai Rajkumar S." ,
"Parvathy M. S.",
"Navaraj Ranjan Arthur")
names[sapply(strsplit(gsub(".","",names,fixed=T)," ",fixed=T),function(x) length(x) == 1)]
[1] "Preety .."
答案 2 :(得分:1)
这可能有点复杂,但这是一种文本挖掘方法。肯定有更多简化的方法,但是我认为这里可能有一些有用的概念。
# define the data frame
df <- data.frame(Name = c("Preety ..",
"Sudalai Rajkumar S.",
"Parvathy M. S.",
"Navaraj Ranjan Arthur"),
stringsAsFactors = FALSE)
library(tidyverse)
library(tidytext)
# break each name out by words. remove all the periods
df_token <- df %>%
rowid_to_column(var = "name_id") %>%
mutate(Name = str_remove_all(Name, pattern = "\\.")) %>%
unnest_tokens(name_split, Name, to_lower = FALSE)
# find the lines with only one word
df_token %>%
group_by(name_id) %>%
summarize(count = n()) %>%
filter(count == 1) %>%
left_join(df_token) %>%
pull(name_split)
[1] "Preety"
答案 3 :(得分:1)
您可以在this.size = size
语句中使用LRUCache
中的str_count
来检查一个单词名称;首先使用stringr
从名称中删除点。
ifelse()