La función personalizada devuelve el mismo valor para todas las filas en el mutado de Dplyr -- r campo con dplyr camp Relacionados El problema

Custom function returns the same value for all rows in dplyr's mutate


2
vote

problema

Español

Tengo los siguientes datos:

                                                   Name 1                             Braund, Mr. Owen Harris 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) 3                              Heikkinen, Miss. Laina 4        Futrelle, Mrs. Jacques Heath (Lily May Peel) 5                            Allen, Mr. William Henry   

Los datos se pueden cargar como:

  structure(list(Name = c("Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Florence Briggs Thayer)",  "Heikkinen, Miss. Laina", "Futrelle, Mrs. Jacques Heath (Lily May Peel)",  "Allen, Mr. William Henry")), .Names = "Name", row.names = c(NA,  -5L), class = c("tbl_df", "tbl", "data.frame"))   

Mi salida esperada es:

                                                   Name    Title 1                             Braund, Mr. Owen Harris       Mr 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer)      Mrs 3                              Heikkinen, Miss. Laina      Mrs 4        Futrelle, Mrs. Jacques Heath (Lily May Peel)      Mrs 5                            Allen, Mr. William Henry       Mr   

El problema es que el código inferior establecerá todo Title s a solo "Mr" . Estoy usando una función personalizada con el structure(list(Name = c("Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Florence Briggs Thayer)", "Heikkinen, Miss. Laina", "Futrelle, Mrs. Jacques Heath (Lily May Peel)", "Allen, Mr. William Henry")), .Names = "Name", row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame")) 10 .

  {using newtonsoft refrence here} Dim settings As New JsonSerializerSettings()  settings.TypeNameHandling = TypeNameHandling.All //asme in auto typenamehandling Dim str As Object = Await response.Content.ReadAsStringAsync() Dim deserializedList As Project = JsonConvert.DeserializeObject(Of Project)(str, settings) 111  

Lo extraño es que si cambio Extracttitle para devolver el argumento como es, funciona como se esperaba. Por ejemplo:

  {using newtonsoft refrence here} Dim settings As New JsonSerializerSettings()  settings.TypeNameHandling = TypeNameHandling.All //asme in auto typenamehandling Dim str As Object = Await response.Content.ReadAsStringAsync() Dim deserializedList As Project = JsonConvert.DeserializeObject(Of Project)(str, settings) 2  

El código anterior devolverá:

  {using newtonsoft refrence here} Dim settings As New JsonSerializerSettings()  settings.TypeNameHandling = TypeNameHandling.All //asme in auto typenamehandling Dim str As Object = Await response.Content.ReadAsStringAsync() Dim deserializedList As Project = JsonConvert.DeserializeObject(Of Project)(str, settings) 3  

Este es mi comportamiento esperado que es diferente del comportamiento del código con el que tengo problemas.

¿Hay algo que me esté perdiendo aquí o es este un error?

P.s. - Estoy usando Dplyr versión 0.5.0

Original en ingles

I have the following data:

                                                 Name 1                             Braund, Mr. Owen Harris 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) 3                              Heikkinen, Miss. Laina 4        Futrelle, Mrs. Jacques Heath (Lily May Peel) 5                            Allen, Mr. William Henry 

The data can be loaded like:

structure(list(Name = c("Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Florence Briggs Thayer)",  "Heikkinen, Miss. Laina", "Futrelle, Mrs. Jacques Heath (Lily May Peel)",  "Allen, Mr. William Henry")), .Names = "Name", row.names = c(NA,  -5L), class = c("tbl_df", "tbl", "data.frame")) 

My expected output is:

                                                 Name    Title 1                             Braund, Mr. Owen Harris       Mr 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer)      Mrs 3                              Heikkinen, Miss. Laina      Mrs 4        Futrelle, Mrs. Jacques Heath (Lily May Peel)      Mrs 5                            Allen, Mr. William Henry       Mr 

The problem is that below code would set all Titles to just "Mr". I'm using a custom function with dplyr's mutate.

library('stringr') library('dplyr')  extractTitle <- function(name) {   str_match(name, '(\\b[a-zA-z]+)\\.')[2] }  data <- data %>%            mutate(Title = extractTitle(Name)) 

The weird thing is that if I change extractTitle to return the argument as is, it works as expected. For example:

extractTitle <- function(name) {   name }  data <- data %>%            mutate(Title = extractTitle(Name)) 

The above code will return:

                                                 Name    Title 1                             Braund, Mr. Owen Harris   Braund, Mr. Owen Harris 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer)   Cumings, Mrs. John Bradley (Florence Briggs Thayer) 3                              Heikkinen, Miss. Laina   Heikkinen, Miss. Laina 4        Futrelle, Mrs. Jacques Heath (Lily May Peel)   Futrelle, Mrs. Jacques Heath (Lily May Peel) 5                            Allen, Mr. William Henry   Allen, Mr. William Henry 

This is my expected behavior which is different from the behavior of the code I'm having trouble with.

Is there something I'm missing here or is this a bug?

P.S. - I'm using dplyr version 0.5.0

     
   
   

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 
  library(dplyr) library(stringr)     data %>%       mutate(title = str_extract(string = Name, pattern = "(Mr|Miss|Mrs)\.")) %>%       select(Name, title)   

que devuelve:

  # A tibble: 6 x 2                                                  Name title                                                 <chr> <chr> 1                             Braund, Mr. Owen Harris   Mr. 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer)  Mrs. 3                              Heikkinen, Miss. Laina Miss. 4        Futrelle, Mrs. Jacques Heath (Lily May Peel)  Mrs. 5                            Allen, Mr. William Henry   Mr. 6                                    Moran, Mr. James   Mr.   
 
library(dplyr) library(stringr)     data %>%       mutate(title = str_extract(string = Name, pattern = "(Mr|Miss|Mrs)\\.")) %>%       select(Name, title) 

which returns:

# A tibble: 6 x 2                                                  Name title                                                 <chr> <chr> 1                             Braund, Mr. Owen Harris   Mr. 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer)  Mrs. 3                              Heikkinen, Miss. Laina Miss. 4        Futrelle, Mrs. Jacques Heath (Lily May Peel)  Mrs. 5                            Allen, Mr. William Henry   Mr. 6                                    Moran, Mr. James   Mr. 
 
 
 
 

Relacionados problema

0  Uniéndose a dos marcos de datos con IDEED_JOIN () [DUPLICADO]  ( Joining two data frames with left join ) 
Esta pregunta ya tiene respuestas aquí : Cómo unirse (fusionar) Marcos de datos (interiores, exterio...

1  Filtrando cada columna de un marco de datos un PUT NA para valores inigualables  ( Filtering each column of a data frame an put na for unmatched values ) 
Tengo una tabla de la siguiente manera: [,1] [,2] [,3] [,4] [,5] [1,] a A 0.06 0.31 -1.5 [2,] b B -0.75 0.2 0.02 [3,] ...

3  Shiny: Dplyr devuelve los mensajes de error  ( Shiny dplyr returns error messages ) 
Uso de --------------------------- Error --------------------------- File: "G:programmingv2wwbasewindow.h" Function: _fakeWndProc Line: 61 Error Code: 1410 E...

0  Cambiar columna basada en casos coincidentes en R  ( Change column based on matched cases in r ) 
Tengo un archivo. Frame que se ve así data=data.frame(time=c(1,1,0.5,1), columnB= c(1,2,5,6), columnC= c(1,2,2,5)) time columnB columnC 1.0 ...

0  R: Convierta la frecuencia al porcentaje con solo un número seleccionado de columnas  ( R convert frequency to percentage with only a selected number of columns ) 
Me gustaría convertir un contexto de datos lleno de frecuencias en un contexto de datos lleno de porcentaje por fila usando dplyr. Mi conjunto de datos tien...

0  ¿Hay alguna manera de optimizar esta declaración: selección de valores de un vector  ( Is there a way to optimize this statement selection of values from a vector ) 
Tengo este código y desde longitud (nodos_data_frame_name) es en realidad alrededor de 4398886 y puede ser mucho más grande y tengo que ejecutar esta oper...

0  Expandir los programas de datos de datos `X` no es un error de secuencia regular  ( Expand dataframe shows x is not a regular sequence error ) 
Estoy teniendo problemas para expandir el siguiente contexto de datos. CREATE TABLE Cal_3Month ( ColID int, ColDate timestamp, ColValue bigint ); INSERT I...

1  Uso de R y PURR para unirse a varios cuadros de datos utilizando una lista de listas con PMAP  ( Using r and purrr to join multiple dataframes using a list of lists with pmap ) 
Estoy tratando de unir los cuadros de datos que están incrustados en una lista con PMAP. BasicDBObject query = new BasicDBObject("metadata", new BasicDBObj...

4  Mutate una variable con rizado-rizado [duplicado]  ( Mutate a variable with curly curly ) 
Esta pregunta ya tiene respuestas aquí : Use los nombres de variables dinámicos en `dplyr` ...

0  ¿Cómo uso DPLYR para filtrar a una variable global predefinida?  ( How do i use dplyr to filter to a pre defined global variable ) 
Digamos que tengo el siguiente escenario. Mi conjunto de datos cambia mensualmente a donde usa el último día del mes + "registro creado". Para evitar cambia...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos