Básicamente tengo la tarea de hacer una simple guía telefónica en R.

Hice una gran matriz en la que cada entrada sigue este patrón (nombre, apellido, número de teléfono, nombre, apellido, número de teléfono, etc.)

Necesito hacer una impresión simple de la información de alguien, como decir que el primer nombre era John, me devolvería todos los índices comenzando con John.

Sé que necesito una instrucción if, pero no sé la sintaxis adecuada para poder identificar el comienzo de la cadena. ¿Alguien puede ayudarme?

r
-1
CPP Noob 2 mar. 2018 a las 01:48

4 respuestas

La mejor respuesta
x <- c('Mary Higgins', 'John Williams', 'Zhu Wang', 'Peter Johnson')
# all elements containing John
grep('John', x)
#[1] 2 4
# starting with John
grep('^John', x)
#[1] 2
0
Robert Hijmans 1 mar. 2018 a las 22:51

No necesita una declaración if, y trataría de evitarlos en general (son lentos y a veces complicados para trabajar). Tu podrías intentar:

data <- data.frame(FirstName = c('Mary', 'John', 'Zhu', 'Peter'), 
                LastName = c('Higgins', 'Williams', 'Wang', 'Johnson'), 
                PhoneNumber = c("234-234-2342", "456-456-4564", "678-678-6788", "345-345-3455"))
data %>%
  filter(FirstName == "John")
0
Harrison B. Pugh 1 mar. 2018 a las 22:52

Puede usar una expresión regular con ^ para especificar que John está al comienzo de la cadena. P.ej.,

names <- c("John Hogg", "Hogg John")
grep("^John", names)

[1] 1

Alternativamente, puede usar startswith:

startsWith(names, "John")

[1]  TRUE FALSE
0
erocoar 1 mar. 2018 a las 23:00

A partir de esta pregunta: Pruebe si los caracteres en cadena en R

chars <- "test"
value <- "es"

grepl(value, chars)
0
SeldomSeenSlim 1 mar. 2018 a las 22:51