La mejor manera de realizar operaciones de filas en R utilizando Pivot_wider.
A continuación se muestra un ejemplo de los datos. El objetivo es combinar las filas en una sola por indcode y propiedad. Las áreas 029 y 031 deben combinarse en una nueva fila, 039900. Por el momento, hay cuatro filas por área. Se buscan crear 4 filas más que sean la suma de las dos áreas por indcode. Hice una pregunta muy similar ayer, pero busco una solución que implique una versión más centrada en dplyr. Mi primer intento está al final
library(dplyr)
library(data.table)
areax <- c(029,029,029,029,031,031,031,031)
indcodex <- c(1011,1012,1011,1012,1011,1012,1011,1012)
time1 <- c(100,150,102,152,104,154,108,158)
time2 <- c(101,151,103,153,105,155,109,162)
ownership <- c(50,50,30,30,50,50,30,30)
test2 <- data.frame(areax,indcodex,time1,time2,ownership)
Resultado deseado
areax indcodex time1 time2 ownership
029 1011 100 101 50
029 1012 150 151 50
029 1011 102 103 30
029 1021 152 153 30
031 1011 104 105 50
031 1012 154 155 50
031 1011 108 109 30
031 1021 158 162 30
039900 1011 204 206 50
039900 1012 304 306 50
039900 1011 210 212 30
039900 1012 310 315 30
test3 <- test2 %>%
tidyr::pivot_wider(names_from = areax, values_from = time1:time2)
test3$newarea <- (time1_29 + time1_31)
davy.ai
Para combinar filas por
indcode
yownership
, mientras se suman las columnastime1
ytime2
, puedes usar la siguiente solución centrada endplyr
:“`{r}
library(dplyr)
test3 <- test2 %>%
group_by(indcodex, ownership) %>%
summarise(time1 = sum(time1),
time2 = sum(time2)) %>%
ungroup() %>%
mutate(areax = ifelse(areax %in% c(“029”, “031”), “039900”, as.character(areax))) %>%
arrange(areax, indcodex)
“`
Este código primero agrupa los datos por
indcodex
yownership
, y luego calcula la suma detime1
ytime2
para cada grupo utilizandosummarise()
. Los datos resultantes se desagrupan y luego se actualiza la columnaareax
para especificar que “029” y “031” deben combinarse en un nuevo valor “039900” usandoifelse()
. Por último, los datos se ordenan porareax
eindcodex
.Ten en cuenta que este código asume que
areax
es de tipo caracter, por lo que lo convierte a caracter dentro del statementifelse()
. Si ya es de tipo caracter, puedes eliminar la llamada aas.character()
. Además, asegúrate de incluirlibrary(dplyr)
antes de ejecutar este código.