I have a dataset with a lot of repeating values.
Example of the data structure:
GRID DATE TIME TAGLFT TAGRT COL LOCX LOCY YEAR TOTAL.sum
<chr> <date> <chr> <chr> <chr> <chr> <dbl> <dbl> <int> <int>
AG 2004-06-01 09:33 47962 47963 P/- 20.5 0 2004 2
AG 2004-06-01 09:33 47962 47963 P/- 20.5 0.5 2004 2
I am trying to conditionally replace LOCY
values if the sum
column for the group_by
is greater than 1 like so:
data %>%
group_by(GRID, DATE, TIME, TAGLFT, TAGRT, COL, LOCX, YEAR) %>%
mutate(LOCY=if(TOTAL.sum>1) first(LOCY) else LOCY)
Desired output is:
GRID DATE TIME TAGLFT TAGRT COL LOCX LOCY YEAR TOTAL.sum
<chr> <date> <chr> <chr> <chr> <chr> <dbl> <dbl> <int> <int>
AG 2004-06-01 09:33 47962 47963 P/- 20.5 0 2004 2
AG 2004-06-01 09:33 47962 47963 P/- 20.5 0 2004 2
The script above was working fine until I updated my R to v 4.2.0.
Now when I run the mutate part of my script, I get the following error:
Error in `mutate()`:
! Problem while computing `LOCY = if (sum > 1) first(LOCY) else LOCY`.
ℹ The error occurred in group 73: GRID = "AG", DATE = 2004-06-01, TIME = "09:33", TAGLFT = "47962", TAGRT = "47963", COL = "P/-", LOCX = 20.5, YEAR = 2004.
Caused by error in `if (TOTAL.sum > 1) ...`:
! the condition has length > 1
Run `rlang::last_error()` to see where the error occurred.
Any ideas what might be going on here? Is it a problem with my script? Am I missing something with my syntax?
In case it's needed, here is my sessionInfo()
> sessionInfo()
R version 4.2.0 (2022-04-22)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Mojave 10.14.6
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib
locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] adehabitatHR_0.4.19 adehabitatLT_0.3.25 CircStats_0.2-6 boot_1.3-28
[5] MASS_7.3-57 adehabitatMA_0.3.14 ade4_1.7-19 deldir_1.0-6
[9] jpeg_0.1-9 ggmap_3.0.0 RgoogleMaps_1.4.5.3 raster_3.5-15
[13] maps_3.4.0 rgdal_1.5-30 rgeos_0.5-9 maptools_1.1-4
[17] sp_1.4-7 data.table_1.14.2 sf_1.0-7 spatsoc_0.1.16
[21] DescTools_0.99.45 glmmTMB_1.1.3 lme4_1.1-29 Matrix_1.4-1
[25] ggnetwork_0.5.10 scales_1.2.0 cowplot_1.1.1 gridExtra_2.3
[29] psych_2.2.5 beepr_1.3 here_1.0.1 magrittr_2.0.3
[33] rcompanion_2.4.15 devtools_2.4.3 usethis_2.1.6 forcats_0.5.1
[37] stringr_1.4.0 purrr_0.3.4 readr_2.1.2 tibble_3.1.7
[41] ggplot2_3.3.6 tidyverse_1.3.1 lubridate_1.8.0 tidyr_1.2.0
[45] plyr_1.8.7 krsp_0.0.2 dplyr_1.0.9
loaded via a namespace (and not attached):
[1] readxl_1.4.0 backports_1.4.1 TMB_1.8.1 splines_4.2.0
[5] TH.data_1.1-1 fansi_1.0.3 memoise_2.0.1 tzdb_0.3.0
[9] remotes_2.4.2 modelr_0.1.8 matrixStats_0.62.0 sandwich_3.0-1
[13] prettyunits_1.1.1 colorspace_2.0-3 rvest_1.0.2 haven_2.5.0
[17] callr_3.7.0 crayon_1.5.1 jsonlite_1.8.0 libcoin_1.0-9
[21] Exact_3.1 keyring_1.3.0 survival_3.3-1 zoo_1.8-10
[25] glue_1.6.2 gtable_0.3.0 emmeans_1.7.4-1 pkgbuild_1.3.1
[29] mvtnorm_1.1-3 DBI_1.1.2 Rcpp_1.0.8.3 xtable_1.8-4
[33] tmvnsim_1.0-2 units_0.8-0 foreign_0.8-82 proxy_0.4-26
[37] stats4_4.2.0 httr_1.4.3 modeltools_0.2-23 ellipsis_0.3.2
[41] pkgconfig_2.0.3 multcompView_0.1-8 dbplyr_2.1.1 utf8_1.2.2
[45] tidyselect_1.1.2 rlang_1.0.2 munsell_0.5.0 cellranger_1.1.0
[49] tools_4.2.0 cachem_1.0.6 cli_3.3.0 generics_0.1.2
[53] audio_0.1-10 broom_0.8.0 fastmap_1.1.0 processx_3.5.3
[57] fs_1.5.2 coin_1.4-2 rootSolve_1.8.2.3 nlme_3.1-157
[61] xml2_1.3.3 brio_1.1.3 compiler_4.2.0 rstudioapi_0.13
[65] png_0.1-7 e1071_1.7-9 testthat_3.1.4 reprex_2.0.1
[69] stringi_1.7.6 ps_1.7.0 desc_1.4.1 lattice_0.20-45
[73] classInt_0.4-3 nloptr_2.0.2 vctrs_0.4.1 pillar_1.7.0
[77] lifecycle_1.0.1 lmtest_0.9-40 estimability_1.3 bitops_1.0-7
[81] lmom_2.8 R6_2.5.1 RMySQL_0.10.23 KernSmooth_2.23-20
[85] gld_2.6.4 sessioninfo_1.2.2 codetools_0.2-18 assertthat_0.2.1
[89] pkgload_1.2.4 rjson_0.2.21 rprojroot_2.0.3 withr_2.5.0
[93] nortest_1.0-4 mnormt_2.0.2 multcomp_1.4-19 expm_0.999-6
[97] parallel_4.2.0 hms_1.1.1 terra_1.5-21 grid_4.2.0
[101] coda_0.19-4 class_7.3-20 minqa_1.2.4 numDeriv_2016.8-1.1
CodePudding user response:
You can use the vectorized version of if
which is ifelse
function as follows:
data %>%
group_by(GRID, DATE, TIME, TAGLFT, TAGRT, COL, LOCX, YEAR) %>%
mutate(LOCY = ifelse(sum > 1, first(LOCY) , LOCY))
#> # A tibble: 2 × 10
# Groups: GRID, DATE, TIME, TAGLFT, TAGRT, COL, LOCX, YEAR [1]
GRID DATE TIME TAGLFT TAGRT COL LOCX LOCY YEAR sum
<chr> <chr> <chr> <int> <int> <chr> <dbl> <dbl> <int> <int>
1 AG 2004-06-01 09:33 47962 47963 P/- 20.5 0 2004 2
2 AG 2004-06-01 09:33 47962 47963 P/- 20.5 0 2004 2
Created on 2022-05-27 by the reprex package (v2.0.1)