es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creando una variable que tiene un valor basado en otra variable en R (datos de panel).

Tengo un marco de datos que contiene información de panel de patentes y económica para los años 2012-2020. Las variables de datos son:

  • investment_year, una variable invariante en el tiempo, que es el año en que una empresa determinada ha recibido una inversión inicial;
  • patent_applications, es el número anual de patentes presentadas por una determinada empresa. La empresa A, por ejemplo, presentó cinco patentes en 2018, dos en 2019, y así sucesivamente.
company_name    investment_year    year    patent_applications
A               2018               2020    7
A               2018               2019    2
A               2018               2018    5
.               .                  .       .
.               .                  .       .
.               .                  .       .
A               2018               2012    4 
B               2015               2020    10
B               2015               2019    3
B               2015               2018    7
.               .                  .       .
.               .                  .       .
.               .                  .       .

Me gustaría crear una variable que contenga el número de solicitudes en t+2, donde t es el año de inversión.

Así, por ejemplo, para la Empresa A el número de solicitudes en t+2 (por ejemplo, patent_applications_t2) sería 7, ya que el año de inversión (2018) + 2 es igual a 2020.

Intenté la línea de código siguiente, pero no produce el resultado correcto.

df$patent_applications_t2 <- df$patent_applications[df$Year == df$Investment_Year + 2]
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear una variable que contenga el número de solicitudes de patente en t + 2, el código debe utilizar la función which() para subconjuntar las filas donde el year es igual a investment_year + 2 para cada empresa. Aquí está el código corregido:

    # Subconjuntar las filas donde el year es igual a investment_year + 2 para cada empresa
    df_t2 <- df[which(df$year == df$investment_year + 2), c("company_name", "patent_applications")]
    
    # Renombrar la columna para indicar que es el número de solicitudes de patentes en t + 2
    colnames(df_t2)[2] <- "patent_applications_t2"
    
    # Fusionar la nueva columna en el marco de datos original
    df <- merge(df, df_t2, by = c("company_name"), all.x = TRUE)
    

    El código primero subconjunta las filas donde year es igual a investment_year + 2 para cada empresa utilizando la función which(). Se seleccionan las columnas company_name y patent_applications porque queremos fusionar esta información de vuelta en el marco de datos original. La función colnames() renombra la segunda columna para indicar que es el número de solicitudes de patentes en t + 2. Finalmente, la función merge() fusiona la nueva columna patent_applications_t2 en el marco de datos original df basándose en company_name. Al utilizar all.x = TRUE, el marco de datos fusionado incluye todas las filas del marco de datos original incluso si no hay coincidencias en el nuevo marco de datos.

Comments are closed.