Cómo hacer una búsqueda vertical (tipo vlookup) en R.
A continuación se muestra un ejemplo de datos. Se intenta agregar una nueva columna de datos “d202002” al marco de datos “old”, pero solo se hace cuando coinciden (naics 123400,123500,123700) con el naics 123600 que tiene valores en la columna “d202001” pero no en “d202002”. Estoy dando vueltas tratando de fusionar estos dos.
library(dplyr)
library(data.table)
naics <- c(123400,123500,123600,123700,123400,123500,123600,123700)
area <- c(000001,000001,000001,000001,000003,000003,000003,000003)
areatype <- c(04,04,04,04,04,04,04,04)
state <- c(32,32,32,32,32,32,32,32)
d202001 <- c(16,18,20,22,24,26,28,30)
old <- data.frame(naics,area,areatype,state,d202001)
naicsnew <- c(123400,123500,123700,123800,123900,123400,123500,123700,123800,123900)
areanew <- c(000001,000001,000001,000001,000001,000003,000003,000003,000003,000003)
areatypenew <- c(04,04,04,04,04,04,04,04,04,04)
statenew <- c(32,32,32,32,32,32,32,32,32,32)
d202002 <- c(17,19,21,23,41,35,36,37,38,45)
new <- data.frame(naicsnew,areanew,areatypenew,statenew,d202002)
Primer intento
new2 <- left_join(old,new, by = c("naics" = "naicsnew", "area" = "areanew", "areatype"="areatypenew","state"="statenew"))
A continuación se muestra el resultado deseado
naics area areatype state d202001 d202002
1 123400 1 4 32 16 17
2 123500 1 4 32 18 19
3 123700 1 4 32 22 21
4 123400 3 4 32 24 35
5 123500 3 4 32 26 36
6 123700 3 4 32 30 38
davy.ai
Para agregar una nueva columna de datos d202002 al “antiguo” marco de datos, pero solo hacerlo cuando coinciden (naics 123400, 123500, 123700) con 123600 teniendo valores en la columna d202001 pero no d202002, podemos usar el siguiente código:
“`{r}
filtrar el nuevo marco de datos para incluir solo filas con naics coincidentes y valores no faltantes en d202001 pero faltantes en d202002
new_filtered <- new %>% filter(naicsnew %in% c(123400, 123500, 123700) & !is.na(d202001) & is.na(d202002))
unir a la izquierda el marco de datos nuevo filtrado con el antiguo marco de datos para agregar la nueva columna solo para las filas coincidentes
result <- old %>% left_join(new_filtered %>% select(naicsnew, d202002) %>% rename(naics = naicsnew), by = “naics”)
Ten en cuenta que las filas con naics 123600 tienen valores faltantes en d202002 ya que no cumplen con la condición de tener un valor no faltante en d202001 en el código original.