找出单个单词的名字

时间:2019-08-26 16:48:02

标签: r

我有一个“名称”列,名称如下:

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))

4 个答案:

答案 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()