Home > Net >  Conditional subtraction in R data frame
Conditional subtraction in R data frame

Time:03-29

I have a fairly straightforward need, but I can't find a previously asked question that is similar enough. I've been trying with dplyr, but can't figure it out.

 julian year
   088   22
   049   19
   041   22
   105   18
   125   22
   245   20

What I want is for each value where data$julian < 105, subtract '1' from data$year, so that

 julian year
   088   21
   049   18
   041   21
   105   18
   125   22
   245   20

CodePudding user response:

Another option with base R:

df$year[df$julian < 105] <- df$year[df$julian < 105] - 1

Output

  julian year
1    088   21
2    049   18
3    041   21
4    105   18
5    125   22
6    245   20

Data

df <- structure(list(name = c("KKSWAP", "KKSWAP"), code = c("The liquidations code for Marco are: 51-BMR05, 74-VAD08, 176-VNF09.", 
"The liquidations code for Clara are: 88-BMR05, 90-VAD08, 152-VNF09."
)), class = "data.frame", row.names = c(NA, -2L))

CodePudding user response:

OP asked about using dplyr in the post. Here, is one with dplyr

library(dplyr)
df1 <- df1 %>%
    mutate(year = case_when(as.numeric(julian) < 105 ~ year -1,
     TRUE ~ as.numeric(year)))

-output

df1
 julian year
1    088   21
2    049   18
3    041   21
4    105   18
5    125   22
6    245   20

data

df1 <- structure(list(julian = c("088", "049", "041", "105", "125", 
"245"), year = c(22L, 19L, 22L, 18L, 22L, 20L)), row.names = c(NA, 
-6L), class = "data.frame")
  • Related