Home > front end >  How to Solve Problems to Generate Numerical Values
How to Solve Problems to Generate Numerical Values

Time:12-28

I'm not able to transform them into numerical values. I did it as follows: df1<-df1 %>% mutate(across(starts_with("DR1"), as.numeric)). What am I wrong about?

df1<-structure(list(date1 = structure(c(1639612800, 1639612800, 1639612800, 
1639612800, 1639612800, 1639612800), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), date2 = structure(c(1636934400, 1636934400, 
1636934400, 1636934400, 1636934400, 1636934400), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), Week = c("Monday", "Monday", "Monday", 
"Monday", "Monday", "Monday"), Category = c("ABC", "ABC", "CDE", 
"CDE", "FDG", "FDG"), DR1 = c("198.00", "401.38", "0.00", "0.00", 
 "0.00", "0.00"), DR01 = c("188.36", "293.91", "0.00", "0.00", 
 "0.00", "0.00"), DR02 = c("195.00", "282.38", "0.00", "0.00", 
"0.00", "0.00"), DR03 = c("195.00", "288.38", "0.00", "0.00", 
 "0.00", "0.00")), row.names = c(NA, -6L), class = c("tbl_df", 
 "tbl", "data.frame"))

df1<-df1 %>% mutate(across(starts_with("DR1"), as.numeric))

x<-df1 %>% select(starts_with("DR0"))

x<-cbind(df1, setNames(df1$DR1 - x, paste0(names(x), "_PV")))
Error in FUN(left, right) : non-numeric argument to binary operator

CodePudding user response:

All the DR columns here are character class. The OP converted only the 'DR1' columns to numeric. Thus we get the error when doing the substraction with DR0 columns. The three step process which includes creating another object 'x' and then cbind can be done more compactly within tidyverse itself - loop across the 'DR' columns and convert to numeric, then loop across the 'DR0' columns, subtract from 'DR1' and create new columns by modifying the .names ({.col} - returns the original column name, _PV adds a suffix to the column name and thus it returns new columns

library(dplyr)
df1 <- df1 %>%
    mutate(across(starts_with("DR"), as.numeric), 
          across(starts_with("DR0"), ~ DR1 - ., .names = "{.col}_PV"))

-output

df1
# A tibble: 6 × 11
  date1               date2               Week   Category   DR1  DR01  DR02  DR03 DR01_PV DR02_PV DR03_PV
  <dttm>              <dttm>              <chr>  <chr>    <dbl> <dbl> <dbl> <dbl>   <dbl>   <dbl>   <dbl>
1 2021-12-16 00:00:00 2021-11-15 00:00:00 Monday ABC       198   188.  195   195     9.64       3       3
2 2021-12-16 00:00:00 2021-11-15 00:00:00 Monday ABC       401.  294.  282.  288.  107.       119     113
3 2021-12-16 00:00:00 2021-11-15 00:00:00 Monday CDE         0     0     0     0     0          0       0
4 2021-12-16 00:00:00 2021-11-15 00:00:00 Monday CDE         0     0     0     0     0          0       0
5 2021-12-16 00:00:00 2021-11-15 00:00:00 Monday FDG         0     0     0     0     0          0       0
6 2021-12-16 00:00:00 2021-11-15 00:00:00 Monday FDG         0     0     0     0     0          0       0
  •  Tags:  
  • r
  • Related