Допустимые имена с использованием R - PullRequest
0 голосов
/ 20 марта 2020

Мои необработанные данные имеют 3 столбца; один из них называется First_Name. Столбец First_name содержит фактические имена, такие как Prabhat и Tony, но также содержит множество недопустимых строк, то есть строк, которые не представляют фактические имена, такие как адреса электронной почты, такие как Prabhat@gmail.com, или строки с числами. и специальные символы, такие как aaa261. Поэтому я хочу отфильтровать действительные строки First_Name.

Вот шаги, которые я делаю:

1-й шаг:

c <- read.csv("Test_Data.csv", TRUE, ",") .

2-й шаг:

First_Name <- pull(c, firstname) # pulling First_Name column from Raw Data. 

3-й шаг:

df[] <- lapply(df[], as.character)

4-й шаг:

df$new <- ifelse(grepl("[^A-z]", df$First_Name), "NA", df$First_Name)

Но он не работает и выдает ошибку:

"Error in $<-.data.frame(*tmp*, new, value = logical(0)) : replacement has 0 rows, data has 50000" .

1 Ответ

0 голосов
/ 21 марта 2020

РЕДАКТИРОВАТЬ

Не совсем уверен, что вы хотите. Вот два решения:

ДАННЫЕ :

df <- data.frame(
  First_Name = c("Prabhat", "Ray", "ben", "Tony", "Prabhat@gmail.com", "aaa261", "aa?w", "123asd", "Bruce", "Aston", "Passi@yahoo.com"))

df
          First_Name
1            Prabhat
2                Ray
3                ben
4               Tony
5  Prabhat@gmail.com
6             aaa261
7               aa?w
8             123asd
9              Bruce
10             Aston
11   Passi@yahoo.com

Преобразование в символ:

df[] <- lapply(df[], as.character)

Первое решение :

В этом решении вы создаете новый столбец с именами и NA s, заменяющими неназванные имена. Замена достигается предложением ifelse, grepl и шаблоном [^A-z], которое соответствует любым строкам, которые не состоят только из букв:

df$new <- ifelse(grepl("[^A-z]", df$First_Name), "NA", df$First_Name)

RESULT :

df
          First_Name     new
1            Prabhat Prabhat
2                Ray     Ray
3                ben     ben
4               Tony    Tony
5  Prabhat@gmail.com      NA
6             aaa261      NA
7               aa?w      NA
8             123asd      NA
9              Bruce   Bruce
10             Aston   Aston
11   Passi@yahoo.com      NA

Второе РЕШЕНИЕ :

Если вы просто заинтересованы в «получении», как вы говорите, имен, которые предполагают, что вы, возможно, захотите их собрать в векторе, то это можно сделать так:

grep("[^A-z]", as.character(unlist(df$First_Name)), value = T, invert = T)

РЕЗУЛЬТАТ :

[1] "Prabhat" "Ray"     "ben"     "Tony"    "Bruce"   "Aston" 

Надеюсь, что один из этих советов будет вам полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...